Если выключен, то отчет не будет размещаться в группе раздела.
+
Раздел, Группа
+
+
Подсистема, в которой необходимо разместить вариант отчета. Подсистемы верхнего уровня - разделы, остальные - группы. При размещении в разделе вариант отчета будет выводиться без группы.
+
Важность
+
Способ выделения варианта отчета в группе: Важный – вариант отчета будет выделен жирным шрифтом. См. также – вариант отчета будет выведен в отдельной группе внизу панели отчетов.
Сбросить пользовательские настройки в панелях отчетов по данному варианту отчета.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl
index 29cc5d0c3..58ff17aed 100644
--- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl
@@ -3,253 +3,179 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
-
- СписокПользователей = "";
- СписокПодсистем = "";
-
- Для каждого Подсистема из Метаданные.Подсистемы Цикл
-
- Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда
- Продолжить;
- КонецЕсли;
-
- СтрокаПодсистемы = ДеревоПодсистем.ПолучитьЭлементы().Добавить();
-
- СтрокаПодсистемы.ПутьКПодсистеме = Подсистема.Имя;
- СтрокаПодсистемы.Название = Подсистема.Синоним;
-
- МассивСтрок = Объект.Подсистемы.НайтиСтроки(Новый Структура("Подсистема", Подсистема.Имя));
- СтрокаПодсистемы.Использование = МассивСтрок.Количество() > 0;
- Если СтрокаПодсистемы.Использование тогда
- СписокПодсистем = СписокПодсистем + Подсистема.Синоним + ", ";
- СтрокаПодсистемы.Предопределенная = МассивСтрок[0].Предопределенная;
- КонецЕсли;
-
- ДобавитьДеревоПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем);
-
- КонецЦикла;
-
- ВиртуальныеПодсистемы = ВариантыОтчетов.ПолучитьВиртуальныеПодсистемы("");
-
- Для каждого Подсистема из ВиртуальныеПодсистемы Цикл
-
- СтрокаПодсистемы = ДеревоПодсистем.Строки.Добавить();
-
- СтрокаПодсистемы.ПутьКПодсистеме = Подсистема.Значение;
- СтрокаПодсистемы.Название = Подсистема.Представлени;
-
- МассивСтрок = Объект.Подсистемы.НайтиСтроки(Новый Структура("Подсистема", Подсистема.Значение));
- СтрокаПодсистемы.Использование = МассивСтрок.Количество() > 0;
- Если СтрокаПодсистемы.Использование тогда
- СписокПодсистем = СписокПодсистем + Подсистема.Синоним + ", ";
- СтрокаПодсистемы.Предопределенная = МассивСтрок[0].Предопределенная;
- КонецЕсли;
-
- ДобавитьДеревоВиртуальныхПодсистем(Подсистема.Значение, СтрокаПодсистемы, СписокПодсистем);
-
- КонецЦикла;
-
- БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма);
- Разделы = ПредставлениеРазделов(ЭтаФорма);
-
- Если Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет
- ИЛИ Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный Тогда
-
- Элементы.Администратор.АвтоОтметкаНезаполненного = Ложь;
- Элементы.Администратор.ТолькоПросмотр = Истина;
- Элементы.Описание.ТолькоПросмотр = Истина;
-
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+ Если Объект.Ссылка.Пустая() Тогда
+ ОшибкаОткрытия = НСтр("ru = 'Новый вариант отчета можно создать только из формы отчета'");
+ Возврат;
КонецЕсли;
+ ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты();
+
+ Если Объект.ПометкаУдаления Тогда
+ ТолькоПросмотр = Истина;
+ Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина;
+ КонецЕсли;
+
+ Если НЕ ПолныеПраваНаВарианты Тогда
+ Элементы.Автор.ТолькоПросмотр = Истина;
+ КонецЕсли;
+
+ Если НЕ Объект.Пользовательский Тогда
+ Элементы.Наименование.ТолькоПросмотр = Истина;
+ Элементы.Доступен.ТолькоПросмотр = Истина;
+ Элементы.Автор.ТолькоПросмотр = Истина;
+ Элементы.Автор.АвтоОтметкаНезаполненного = Ложь;
+ КонецЕсли;
+
+ ЭтоВнешний = (Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внешний);
+ Если ЭтоВнешний Тогда
+ Элементы.ВидимостьПоУмолчанию.ТолькоПросмотр = Истина;
+ Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина;
+ КонецЕсли;
+
+ Элементы.ВосстановитьИсходныеНастройки.Видимость = (
+ ПолныеПраваНаВарианты
+ И Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний
+ И НЕ Объект.Пользовательский
+ );
+
+ // Заполнение имени отчета для команды "Просмотр"
+ Если Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Тогда
+ ИмяОтчета = Объект.Отчет.Имя;
+ ИначеЕсли Объект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный Тогда
+ ИмяОтчета = Объект.Отчет.ИмяОбъекта;
+ Иначе
+ ИмяОтчета = Объект.Отчет;
+ КонецЕсли;
+
+ ПерезаполнитьДерево();
+
+ ВариантыОтчетов.ДеревоПодсистемДобавитьУсловноеОформление(ЭтаФорма);
+
+ Доступен = ?(Объект.ТолькоДляАвтора, "1", "2");
+
+ ВидимостьДоступность(ЭтаФорма);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриОткрытии(Отказ)
+ Если НЕ ПустаяСтрока(ОшибкаОткрытия) Тогда
+ Если Объект.Ссылка.Пустая() Тогда
+ Отказ = Истина;
+ Иначе
+ ТолькоПросмотр = Истина;
+ КонецЕсли;
+
+ Предупреждение(ОшибкаОткрытия);
+ КонецЕсли;
+КонецПроцедуры
+
+&НаСервере
+Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
+ ВариантыОтчетов.ДеревоПодсистемЗаписать(ЭтаФорма, ТекущийОбъект);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПослеЗаписи(ПараметрыЗаписи)
+ ПараметрОповещения = Новый Структура("Ссылка, Наименование, Автор, Описание, ВидимостьПоУмолчанию");
+ ЗаполнитьЗначенияСвойств(ПараметрОповещения, Объект);
+ Оповестить(ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(), ПараметрОповещения, ИмяФормы);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ
&НаКлиенте
-Процедура БыстрыйДоступНажатие(Элемент, СтандартнаяОбработка)
+Процедура ОписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
-
- ИсключенияБыстрогоДоступа = Новый СписокЗначений;
- Для каждого СтрокаПользователь из Объект.ИсключенияБыстрогоДоступа Цикл
- ИсключенияБыстрогоДоступа.Добавить(СтрокаПользователь.Пользователь);
- КонецЦикла;
- ПараметрыФормы = Новый Структура("БыстрыйДоступ, ИсключенияБыстрогоДоступа", Объект.БыстрыйДоступ, ИсключенияБыстрогоДоступа);
-
- Структура = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаБыстрогоДоступа", ПараметрыФормы, ЭтаФорма);
- Если Структура = Неопределено тогда
- Возврат;
- КонецЕсли;
-
- Объект.БыстрыйДоступ = Структура.БыстрыйДоступ;
-
- Объект.ИсключенияБыстрогоДоступа.Очистить();
- Для Каждого ЭлементСписка Из Структура.ИсключенияБыстрогоДоступа Цикл
- Объект.ИсключенияБыстрогоДоступа.Добавить().Пользователь = ЭлементСписка.Значение;
- КонецЦикла;
-
- БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма);
- Модифицированность = Истина;
+ ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста(
+ Объект.Описание,
+ Объект.Описание,
+ Модифицированность,
+ НСтр("ru = 'Описание'")
+ );
КонецПроцедуры
&НаКлиенте
-Процедура РазделыНажатие(Элемент, СтандартнаяОбработка)
- СтандартнаяОбработка = Ложь;
-
- ПараметрыФормы = Новый Структура("АдресДереваПодсистем, Подсистемы, НовыйЭлементСправочника");
- ПараметрыФормы.Подсистемы = Объект.Подсистемы;
- ПараметрыФормы.НовыйЭлементСправочника = Объект.Ссылка.Пустая();
-
- ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы);
-
- ВозвращаемыеПараметры = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаПодсистем", ПараметрыФормы, ЭтаФорма);
-
- Если ВозвращаемыеПараметры <> Неопределено тогда
- Объект.Подсистемы.Очистить();
- Для каждого ОписаниеПодсистема из ВозвращаемыеПараметры.СписокПодсистем Цикл
- СтрокаПодсистемы = Объект.Подсистемы.Добавить();
- СтрокаПодсистемы.Подсистема = ОписаниеПодсистема.Подсистема;
- СтрокаПодсистемы.Название = ОписаниеПодсистема.Название;
- СтрокаПодсистемы.Предопределенная = ОписаниеПодсистема.Предопределенная;
- КонецЦикла;
-
- ЗафиксироватьРезультатНастройкиПодсистем(ВозвращаемыеПараметры);
-
- Разделы = ПредставлениеРазделов(ЭтаФорма);
-
- Модифицированность = Истина;
-
- КонецЕсли;
+Процедура ДоступенПриИзменении(Элемент)
+ Объект.ТолькоДляАвтора = (ЭтаФорма.Доступен = "1");
+ ВидимостьДоступность(ЭтаФорма, "ТолькоДляАвтора");
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем
+
+&НаКлиенте
+Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент)
+ ВариантыОтчетовКлиент.ДеревоПодсистемИспользованиеПриИзменении(ЭтаФорма, Элемент);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДеревоПодсистемВажностьПриИзменении(Элемент)
+ ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтаФорма, Элемент);
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
+
+&НаКлиенте
+Процедура ВосстановитьИсходныеНастройки(Команда)
+ РезультатРаботыСерверера = ВосстановитьИсходныеНастройкиСервер();
+ Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина);
+ ВариантыОтчетовКлиент.ПоказатьРезультат(РезультатРаботыСерверера);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
&НаКлиентеНаСервереБезКонтекста
-Функция ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма)
- ВариантБыстрыйДоступ = ЭтаФорма.Объект.БыстрыйДоступ;
- ВариантИсключенияБыстрогоДоступа = ЭтаФорма.Объект.ИсключенияБыстрогоДоступа;
-
- Результат = "";
- Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл
- ПредставлениеСтроки = СокрЛП(Строка(СтрокаТаблицы.Пользователь));
- Если ПредставлениеСтроки <> "" Тогда
- Если Результат = "" Тогда
- Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все кроме:'") +" ", "");
- Результат = Результат + ПредставлениеСтроки;
- Иначе
- Результат = Результат +", "+ ПредставлениеСтроки;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
-
- Если Результат = "" Тогда
- Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все'"), НСтр("ru = 'Пользователи не выбраны'"));
+Процедура ВидимостьДоступность(ЭтаФорма, Изменения = "")
+ Если ЭтаФорма.ТолькоПросмотр Тогда
+ Возврат;
КонецЕсли;
+ Объект = ЭтаФорма.Объект;
+ Элементы = ЭтаФорма.Элементы;
+
+ Если Изменения = "" ИЛИ Изменения = "ТолькоДляАвтора" Тогда
+ Если НЕ ЭтаФорма.ЭтоВнешний Тогда
+ Элементы.ВидимостьПоУмолчанию.Доступность = НЕ Объект.ТолькоДляАвтора;
+ КонецЕсли;
+ КонецЕсли;
+КонецПроцедуры
+
+&НаСервере
+Функция ПерезаполнитьДерево()
+ ДеревоПриемник = ВариантыОтчетов.ДеревоПодсистемСформировать(ЭтаФорма, Объект);
+ ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем");
+ Возврат Истина;
+КонецФункции
+
+&НаСервере
+Функция ВосстановитьИсходныеНастройкиСервер()
+ Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок, Ссылка", Ложь, "", "", "", "", "");
+
+ ДеревоНастроек = ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации();
+
+ ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(ДеревоНастроек, Объект.Отчет, Объект.КлючВарианта);
+
+ Объект.Наименование = ОписаниеВарианта.Наименование;
+ Объект.Описание = ОписаниеВарианта.Описание;
+
+ Объект.Размещение.Очистить();
+ ВариантыОтчетов.ВосстановитьРазмещениеПредопределенногоВариантаОтчета(Объект, ОписаниеВарианта);
+
+ ПерезаполнитьДерево();
+
+ Модифицированность = Истина;
+
+ Результат.Заголовок = НСтр("ru = 'Восстановлены настройки варианта отчета'");
+ Результат.Оповестить = Истина;
+ Результат.Текст = Строка(Объект.Ссылка);
+ Результат.Ссылка = ПолучитьНавигационнуюСсылку(Объект.Ссылка);
+
Возврат Результат;
КонецФункции
-&НаКлиентеНаСервереБезКонтекста
-Функция ПредставлениеРазделов(ЭтаФорма)
- ВариантПодсистемы = ЭтаФорма.Объект.Подсистемы;
-
- Результат = "";
- Для Каждого СтрокаТаблицы Из ВариантПодсистемы Цикл
- ПредставлениеСтроки = СокрЛП(СтрокаТаблицы.Название);
- Если ПредставлениеСтроки <> "" Тогда
- Результат = Результат + ПредставлениеСтроки + ", ";
- КонецЕсли;
- КонецЦикла;
-
- Если Результат = "" Тогда
- Результат = НСтр("ru = 'Разделы не выбраны'");
- Иначе
- Результат = Лев(Результат, СтрДлина(Результат)-2);
- КонецЕсли;
-
- Возврат Результат;
-КонецФункции
-
-&НаСервере
-Процедура ДобавитьДеревоПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем)
-
- Для каждого ПодсистемаПодчиненная из Подсистема.Подсистемы Цикл
-
- Если Не ПодсистемаПодчиненная.ВключатьВКомандныйИнтерфейс тогда
- Продолжить;
- КонецЕсли;
-
- СтрокаПодсистемыПодчиненой = СтрокаПодсистемы.ПолучитьЭлементы().Добавить();
- СтрокаПодсистемыПодчиненой.Название = ПодсистемаПодчиненная.Синоним;
- МассивСтрок = Объект.Подсистемы.НайтиСтроки(
- Новый Структура("Подсистема", СтрокаПодсистемы.ПутьКПодсистеме + "\" + ПодсистемаПодчиненная.Имя));
- СтрокаПодсистемыПодчиненой.Использование = МассивСтрок.Количество() > 0;
- Если СтрокаПодсистемыПодчиненой.Использование тогда
- СписокПодсистем = СписокПодсистем + ПодсистемаПодчиненная.Синоним + ", ";
- СтрокаПодсистемыПодчиненой.Предопределенная = МассивСтрок[0].Предопределенная;
- КонецЕсли;
- СтрокаПодсистемыПодчиненой.ПутьКПодсистеме = СтрокаПодсистемы.ПутьКПодсистеме + "\" + ПодсистемаПодчиненная.Имя;
- ДобавитьДеревоПодсистем(ПодсистемаПодчиненная, СтрокаПодсистемыПодчиненой, СписокПодсистем);
-
- КонецЦикла;
-
- ВиртуальныеПодсистемы = ВариантыОтчетов.ПолучитьВиртуальныеПодсистемы(СтрокаПодсистемы.ПутьКПодсистеме);
-
- Для каждого ПодсистемаПодчиненная из ВиртуальныеПодсистемы Цикл
-
- СтрокаПодсистемыПодчиненой = СтрокаПодсистемы.ПолучитьЭлементы().Добавить();
- СтрокаПодсистемыПодчиненой.Название = ПодсистемаПодчиненная.Представление;
- МассивСтрок = Объект.Подсистемы.НайтиСтроки(
- Новый Структура("Подсистема", ПодсистемаПодчиненная.Значение));
- СтрокаПодсистемыПодчиненой.Использование = МассивСтрок.Количество() > 0;
- Если СтрокаПодсистемыПодчиненой.Использование тогда
- СписокПодсистем = СписокПодсистем + ПодсистемаПодчиненная.Представление + ", ";
- СтрокаПодсистемыПодчиненой.Предопределенная = МассивСтрок[0].Предопределенная;
- КонецЕсли;
- СтрокаПодсистемыПодчиненой.ПутьКПодсистеме = ПодсистемаПодчиненная.Значение;
- ДобавитьДеревоВиртуальныхПодсистем(ПодсистемаПодчиненная.Значение, СтрокаПодсистемыПодчиненой, СписокПодсистем);
-
- КонецЦикла;
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьДеревоВиртуальныхПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем)
-
- ВиртуальныеПодсистемы = ВариантыОтчетов.ПолучитьВиртуальныеПодсистемы(Подсистема);
-
- Для каждого ПодсистемаПодчиненная из ВиртуальныеПодсистемы Цикл
-
- СтрокаПодсистемыПодчиненой = СтрокаПодсистемы.ПолучитьЭлементы().Добавить();
- СтрокаПодсистемыПодчиненой.Название = ПодсистемаПодчиненная.Представление;
- МассивСтрок = Объект.Подсистемы.НайтиСтроки(
- Новый Структура("Подсистема", ПодсистемаПодчиненная.Значение));
- СтрокаПодсистемыПодчиненой.Использование = МассивСтрок.Количество() > 0;
- Если СтрокаПодсистемыПодчиненой.Использование тогда
- СписокПодсистем = СписокПодсистем + ПодсистемаПодчиненная.Представление + ", ";
- СтрокаПодсистемыПодчиненой.Предопределенная = МассивСтрок[0].Предопределенная;
- КонецЕсли;
- СтрокаПодсистемыПодчиненой.ПутьКПодсистеме = ПодсистемаПодчиненная.Значение;
- ДобавитьДеревоВиртуальныхПодсистем(ПодсистемаПодчиненная.Значение, СтрокаПодсистемыПодчиненой, СписокПодсистем);
-
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы)
-
- ДеревоЗначений = ДанныеФормыВЗначение(ДеревоПодсистем, Тип("ДеревоЗначений"));
- ПараметрыФормы.АдресДереваПодсистем = ПоместитьВоВременноеХранилище(ДеревоЗначений, ЭтаФорма.УникальныйИдентификатор);
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ЗафиксироватьРезультатНастройкиПодсистем(ВозвращаемыеПараметры)
-
- ДеревоЗначений = ПолучитьИзВременногоХранилища(ВозвращаемыеПараметры.АдресДереваПодсистем);
- ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем");
- УдалитьИзВременногоХранилища(ВозвращаемыеПараметры.АдресДереваПодсистем);
-
-КонецПроцедуры
-
diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html
index 1e7b63b52..0d1ad9f8e 100644
--- a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html
+++ b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html
@@ -1,10 +1,31 @@
-
-
-
Вариант отчета представляет собой сохраненную настройку, которая содержит описание группировок, отборов, условные оформления и т.п.
-
Для создания нового или изменения существующего варианта отчета можно воспользоваться командой "Сохранить вариант" из формы отчета.
-
Удаление отчета можно производить непосредственно из формы сохранения настроек варианта отчета, а также пометить вариант отчета на удаление непосредственно из списка вариантов отчета.
-
Для получения информация по настройке вариантов отчета обратитесь к документации по конфигурированию и администрированию 1С:Предприятие 8.
Редактирование, открытие и выбор вариантов отчетов.
+
Перемещаясь по списку "Раздел, Группа" список "Варианты отчетов" автоматически фильтруется по выбранному разделу или группе. Варианты отчетов можно перетаскивать или добавлять (с зажатой клавишей Ctrl) в другие разделы или группы.
Внутренний, Дополнительный или Внешний. Варианты внешних отчетов не могут размещаться в панели отчетов.
+
Ключ варианта
+
Ключ варианта отчета.
+
Пользовательский
+
Да - Варианты отчетов, которые были сохранены сохранен пользователями в режиме Предприятия, Нет - Варианты отчетов, которые были созданы на этапе разработки отчета в конфигураторе.
+
По умолчанию виден в панелях отчетов всех пользователей
+
Значение по умолчанию флажка "Видимость" для всех пользователей в панелях отчетов.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl
index 25af3b43b..8e0f586f4 100644
--- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl
@@ -1,13 +1,98 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
+ Если Отказ ИЛИ ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
ИсключаемыеРеквизиты = Новый Массив;
- Если ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет
- ИЛИ ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный Тогда
- ИсключаемыеРеквизиты.Добавить("Администратор");
+ Если НЕ Пользовательский Тогда
+ ИсключаемыеРеквизиты.Добавить("Автор");
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты);
+
+ Если Наименование <> "" И ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование) Тогда
+ Отказ = Истина;
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"),
+ Наименование
+ ),
+ ,
+ "Наименование"
+ );
+ КонецЕсли;
КонецПроцедуры
+
+Процедура ПередЗаписью(Отказ)
+ Если Отказ ИЛИ ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
+ ПользователемИзмененаПометкаУдаления = (
+ НЕ ЭтоНовый()
+ И ПометкаУдаления <> Ссылка.ПометкаУдаления
+ И НЕ ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных")
+ );
+
+ Если НЕ Пользовательский И ПользователемИзмененаПометкаУдаления Тогда
+ Если ПометкаУдаления Тогда
+ ТекстОшибки = НСтр("ru = 'Пометка на удаление предопределенного варианта отчета запрещена.'");
+ Иначе
+ ТекстОшибки = НСтр("ru = 'Снятие пометки удаления предопределенного варианта отчета запрещена.'");
+ КонецЕсли;
+ ВариантыОтчетов.ОшибкаПоВарианту(Ссылка, ТекстОшибки);
+ ВызватьИсключение ТекстОшибки;
+ КонецЕсли;
+
+ Если НЕ ПометкаУдаления И ПользователемИзмененаПометкаУдаления Тогда
+ НаименованиеЗанято = ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование);
+ КлючВариантаЗанят = ВариантыОтчетов.КлючВариантаЗанят(Отчет, Ссылка, КлючВарианта);
+ Если НаименованиеЗанято ИЛИ КлючВариантаЗанят Тогда
+ ТекстОшибки = НСтр("ru = 'Ошибка снятия пометки удаления варианта отчета:'");
+ Если НаименованиеЗанято Тогда
+ ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Наименование ""%1"" уже занято другим вариантом этого отчета.'"),
+ Наименование
+ );
+ Иначе
+ ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Ключ варианта ""%1"" уже занят другим вариантом этого отчета.'"),
+ КлючВарианта
+ );
+ КонецЕсли;
+ ТекстОшибки = ТекстОшибки + НСтр("ru = 'Перед снятием пометки удаления варианта отчета
+ |необходимо установить пометку удаления конфликтующего варианта отчета.'");
+ ВариантыОтчетов.ОшибкаПоВарианту(Ссылка, ТекстОшибки);
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
+ Отказ = Истина;
+ Возврат;
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПриЗаписи(Отказ)
+ Если Отказ ИЛИ ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
+ // Удаление из табличной части подсистем, помеченных на удаление.
+ МассивУдаляемыхСтрок = Новый Массив;
+ Для Каждого СтрокаРазмещения Из Размещение Цикл
+ Если СтрокаРазмещения.РазделИлиГруппа.ПометкаУдаления = Истина Тогда
+ МассивУдаляемыхСтрок.Добавить(СтрокаРазмещения);
+ КонецЕсли;
+ КонецЦикла;
+ Для Каждого СтрокаРазмещения Из МассивУдаляемыхСтрок Цикл
+ Размещение.Удалить(СтрокаРазмещения);
+ КонецЦикла;
+КонецПроцедуры
+
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo
index 5a3c55490..8b3544a34 100644
--- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo
+++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo
@@ -77,10 +77,6 @@
UseDescription
-
- ru
- Вариант отчета
- ShowErrorUse
@@ -119,15 +115,17 @@
BothWaysCatalog.ВариантыОтчетов.Form.ФормаЭлементаCatalog.ВариантыОтчетов.Form.ФормаСписка
- Catalog.ВариантыОтчетов.Form.ФормаВыбора
-
- КлючОбъекта
+ Catalog.ВариантыОтчетов.Form.ФормаСписка
+
+ Отчетru
- Ключ объекта
+ ОтчетString
+ CatalogRef.ДополнительныеОтчетыИОбработки
+ CatalogRef.ИдентификаторыОбъектовМетаданных150
@@ -143,63 +141,14 @@
IndexUse
-
- Администратор
-
- ru
- Автор
-
-
- CatalogRef.Пользователи
-
-
-
- ShowError
-
- Catalog.Пользователи.EmptyRef
-
- Index
- Use
- Use
-
-
- Описание
-
- ru
- Описание
-
-
- String
-
-
-
-
-
- Use
- Use
-
-
- ХранилищеЗначений
-
- ru
- Хранилище значений
-
-
- ValueStorage
-
-
-
-
- Use
-
- ТипВариантаОтчета
+ ТипОтчетаru
- Тип варианта отчета
+ Тип отчета
- EnumRef.ТипыВариантовОтчетов
+ EnumRef.ТипыОтчетовru
@@ -235,11 +184,72 @@
IndexUse
-
- БыстрыйДоступ
+
+ Пользовательскийru
- Быстрый доступ
+ Пользовательский
+
+
+ Boolean
+
+
+ ru
+ Тип варианта отчета:
+Да - Пользовательский,
+Нет - Предопределенный.
+
+
+
+
+ Use
+ Use
+
+
+ Автор
+
+ ru
+ Автор
+
+
+ CatalogRef.Пользователи
+
+
+
+ ShowError
+
+ Catalog.Пользователи.EmptyRef
+
+ Index
+ Use
+ Use
+
+
+ ТолькоДляАвтора
+
+ ru
+ Только для автора:
+
+
+ Boolean
+
+
+ ru
+ Влияет на доступность варианта из панели отчетов:
+Флажок снят - вариант доступен всем пользователям.
+Флажок установлен - вариант доступен только автору.
+
+
+
+
+ Use
+ Use
+
+
+ ВидимостьПоУмолчанию
+
+ ru
+ По умолчанию виден в панели отчетовBoolean
@@ -252,11 +262,58 @@
IndexUse
-
- ПредставлениеОбъекта
+
+ Настройкиru
- Представление объекта
+ Настройки
+
+
+ ValueStorage
+
+
+
+
+ Use
+
+
+ Описание
+
+ ru
+ Описание
+
+
+ String
+
+
+
+
+
+ Use
+ Use
+
+
+ УдалитьКлючОбъекта
+
+ ru
+ Удалить ключ объекта
+
+
+ String
+
+ 150
+
+
+
+
+
+ Use
+
+
+ УдалитьПредставлениеОбъекта
+
+ ru
+ Удалить представление объектаString
@@ -264,14 +321,9 @@
256
-
- ru
- Отчет
-
- UseUse
@@ -279,10 +331,10 @@
- Подсистемы
+ Размещениеru
- Подсистемы
+ РазмещениеUse
@@ -292,47 +344,64 @@
-
- Подсистема
+
+ Использованиеru
- Подсистема
+ Использование
- String
-
- 500
-
+ Boolean
-
+
+
+ Use
+ Use
+
+
+ РазделИлиГруппа
+ ru
- Раздел интерфейса
-
+ Раздел, Группа
+
+
+ CatalogRef.ИдентификаторыОбъектовМетаданных
+ UseIndexUse
-
- Название
+
+ Важныйru
- Название
+ Важный
- String
-
- 200
-
+ Boolean
-
- ru
- Раздел интерфейса
- Use
+ Index
+ Use
+
+
+ СмТакже
+
+ ru
+ См также
+
+ Вариант находится в группе "См. также"
+
+ Boolean
+
+
+
+ Use
+ IndexUse
@@ -353,16 +422,48 @@
UseUse
+
+ УдалитьНазвание
+
+ ru
+ Удалить название
+
+
+ String
+
+ 200
+
+
+
+
+ Use
+
+
+ УдалитьПодсистема
+
+ ru
+ Удалить подсистема
+
+
+ String
+
+ 500
+
+
+
+
+ Use
+
- ИсключенияБыстрогоДоступа
+ УдалитьИсключенияБыстрогоДоступаru
- Исключения быстрого доступа
+ Удалить исключения быстрого доступаUse
@@ -381,17 +482,26 @@
CatalogRef.Пользователи
-
- ru
- Пользователь отчета
- Use
- Index
- Use
+
+ РазмещениеВРазделах
+
+ ru
+ Размещение в разделах
+
+ Размещение нескольких вариантов отчетов в разделах
+
+
+ ru
+
+
+ PersonalComputer
+ MobileDevice
+ ФормаСписка
@@ -405,63 +515,60 @@
ФормаЭлементаru
- Форма элемента
+ Вариант отчета
+
+
+ ru
+
+ PersonalComputerMobileDevice
-
- НастройкаБыстрогоДоступа
+
+ Открытьru
- Настройка быстрого доступа
+ Открыть...
- PersonalComputer
- MobileDevice
-
-
- НастройкаПодсистем
+ FormCommandBarImportant
+
+ CatalogRef.ВариантыОтчетов
+
+ PictureAndText
+
+ StdPicture.Report
+
+ F3
+
+
+ РазместитьВРазделахru
- Настройка подсистем
+ Разместить в разделах...
- PersonalComputer
- MobileDevice
-
-
- НастройкаГруппировкиПоРазделам
+ FormCommandBarImportant
+
+ CatalogRef.ВариантыОтчетов
+
+ Multiple
+ true
+ Auto
+
+
+ СброситьНастройкиПользователейru
- Настройка группировки по разделам
+ Сбросить настройки пользователей
- PersonalComputer
- MobileDevice
-
-
- ПереместитьВариантВРаздел
-
- ru
- Переместить вариант в раздел
-
- PersonalComputer
- MobileDevice
-
-
- СкопироватьВариантВРаздел
-
- ru
- Скопировать вариант в раздел
-
- PersonalComputer
- MobileDevice
-
-
- ФормаВыбора
-
- ru
- Форма выбора
-
- PersonalComputer
- MobileDevice
-
+ FormCommandBarImportant
+
+ CatalogRef.ВариантыОтчетов
+
+ Multiple
+ Auto
+
+ StdPicture.User
+
+
diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl
index a3ee822d4..0ba8437e0 100644
--- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl
+++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl
@@ -337,7 +337,7 @@
КонецЕсли;
Если СпособСравненияВерсийФайлов = Неопределено Тогда
- СпособСравненияВерсийФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов;
+ СпособСравненияВерсийФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов;
КонецЕсли;
Если СпособСравненияВерсийФайлов = Неопределено Тогда // первый вызов - еще не инициализирована настройка
@@ -347,7 +347,7 @@
Возврат;
КонецЕсли;
- СпособСравненияВерсийФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов;
+ СпособСравненияВерсийФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов;
КонецЕсли;
Если СпособСравненияВерсийФайлов = Неопределено Тогда
diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl
index d23add294..32a12755c 100644
--- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl
@@ -26,10 +26,10 @@
Элементы.ГруппаХранение.Видимость = Ложь;
КонецЕсли;
- ТомПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Объект.Том);
+ ТомПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Объект.Том);
- СписокРасширенийТекстовыхФайлов = ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов();
- Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Объект.Расширение) Тогда
+ СписокРасширенийТекстовыхФайлов = ФайловыеФункцииСлужебный.ПолучитьСписокРасширенийТекстовыхФайлов();
+ Если ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Объект.Расширение) Тогда
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
diff --git a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html
index df6474dc6..5b06614f2 100644
--- a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html
+++ b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Для просмотра списка всех версий файла откройте его карточку (F2 или команда "Открыть карточку") и перейдите в раздел "Версии файлов".
В списке версий можно:
открыть файл версии соответствующим приложением для просмотра (команда "Открыть карточку");
diff --git a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl
index f10d180f9..46c5cd5d0 100644
--- a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
Процедура ПередЗаписью(Отказ)
@@ -49,7 +51,7 @@
КонецЕсли;
// Выполним установку индекса пиктограммы при записи объекта
- ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);
+ ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);
Если СтатусИзвлеченияТекста.Пустая() Тогда
СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен;
@@ -102,7 +104,7 @@
Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда
Если НЕ Том.Пустая() Тогда
- ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Том) + ПутьКФайлу;
+ ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Том) + ПутьКФайлу;
Попытка
Файл = Новый Файл(ПолныйПуть);
Файл.УстановитьТолькоЧтение(Ложь);
@@ -119,6 +121,8 @@
КонецЕсли;
КонецЕсли;
+ // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки.
+
КонецПроцедуры
// Возвращает текущее значение пометки удаления в информационной базе
@@ -146,3 +150,5 @@
Возврат Неопределено;
КонецФункции
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html
index 4780922ad..ed30b0785 100644
--- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html
+++ b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Для каждого физического лица можно указать реквизиты документа, удостоверяющего личность. Для указания вида документа и используется этот справочник.
Справочник уже содержит основные документы, удостоверяющие личность, но может быть расширен пользователем.
diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl
index 492488f7f..3c13e29ce 100644
--- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl
+++ b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -6,3 +8,5 @@
Параметры.Отбор.Вставить("ПометкаУдаления",Ложь);
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html
index 5ad2ac925..1df4c93d8 100644
--- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html
+++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Конфигурация позволяет хранить следующие типы контактной информации:
Адрес — реквизит с таким типом контактной информации предназначен для хранения адреса в виде произвольной строки или в виде шаблона адреса. Позволяет заполнять адрес, используя адресный классификатор, из формы‑шаблона ввода адреса. Если адрес заполняется с помощью адресного классификатора, то индекс адреса устанавливается из классификатора автоматически, после окончания ввода адреса. Предопределенные фактический и юридический адреса используются в печатных формах документов.
Справочник Виды контактной информации имеет двухуровневую иерархию. Группы справочника соответствуют справочникам-носителям контактной информации, а элементы внутри этих групп определяют состав контактной информации этих справочников. Добавление новых групп в этот справочник запрещено. Поставка конфигурации осуществляется c предопределенными группами и элементами справочника. Для добавления произвольного реквизита в один из этих справочников, необходимо добавить в справочник Виды контактной информации в соответствующую группу новый элемент.
Для редактирования сведений о внешнем ользователе необходимы права администрирования или права ответственного за внешних пользователей. В остальных случаях, доступен только просмотр сведений о себе, а также возможность изменить свой пароль, язык программы и контактную информацию.
Внешний пользователь связан с каким-то объектом программы (например, контрагентом, сотрудником и т.п.), указанным в поле Объект.
Флажок Недействителен по умолчанию снят для всех внешних пользователей. Но если пользователь по каким-либо причинам более не работает с программой, и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок Недействителен. Такого внешнего пользователя нельзя выбрать, и он не отображается в списке внешних пользователей.
diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl
index 4935b63eb..8fbb64ff3 100644
--- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl
@@ -4,83 +4,106 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- //** Установка начальных значений
- // перед загрузкой данных из настроек на сервере
- // для случая, когда данные ещё не были записаны и не загружаются
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- // Для нового элемента показать все роли, иначе только выбранные
- ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка);
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ЗначениеЗаполнено(Объект.Ссылка);
- //
- СкрытьРольПолныеПрава = Истина;
- ОбновитьДеревоРолей();
+ // Заполнение вспомогательных данных.
-
- //** Заполнение постоянных данных
ЗапретРедактированияРолей = ПользователиПереопределяемый.ЗапретРедактированияРолей();
АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь();
- // Заполнение списка выбора языка
- Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл
- Элементы.ПредставлениеЯзыка.СписокВыбора.Добавить(МетаданныеЯзыка.Синоним);
- КонецЦикла;
+ // Заполнение списка выбора языка.
+ Если Метаданные.Языки.Количество() < 2 Тогда
+ Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь;
+ Иначе
+ Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл
+
+ Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить(
+ МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним);
+ КонецЦикла;
+ КонецЕсли;
- //** Подготовка к интерактивным действиям с учетом сценариев открытия формы
+ // Подготовка к интерактивным действиям с учетом сценариев открытия формы.
УстановитьПривилегированныйРежим(Истина);
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
- // Создание нового элемента
- Если Параметры.ГруппаНовогоВнешнегоПользователя <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
+
+ // Создание нового элемента.
+ Если Параметры.ГруппаНовогоВнешнегоПользователя
+ <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
+
ГруппаНовогоВнешнегоПользователя = Параметры.ГруппаНовогоВнешнегоПользователя;
КонецЕсли;
+
Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
- // Копирование элемента
+ // Копирование элемента.
+ ЗначениеКопирования = Параметры.ЗначениеКопирования;
Объект.ОбъектАвторизации = Неопределено;
Объект.Наименование = "";
Объект.Код = "";
Объект.УдалитьПароль = "";
- ПрочитатьПользователяИБ(ЗначениеЗаполнено(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ));
+ ПрочитатьПользователяИБ(ЗначениеЗаполнено(
+ Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ));
Иначе
- // Добавление элемента
+ // Добавление элемента.
Если Параметры.Свойство("ОбъектАвторизацииНовогоВнешнегоПользователя") Тогда
+
Объект.ОбъектАвторизации = Параметры.ОбъектАвторизацииНовогоВнешнегоПользователя;
ОбъектАвторизацииЗаданПриОткрытии = ЗначениеЗаполнено(Объект.ОбъектАвторизации);
ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(ЭтаФорма, Объект);
+
ИначеЕсли ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда
- ТипОбъектовАвторизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаНовогоВнешнегоПользователя, "ТипОбъектовАвторизации");
+
+ ТипОбъектовАвторизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита(
+ ГруппаНовогоВнешнегоПользователя, "ТипОбъектовАвторизации");
+
Объект.ОбъектАвторизации = ТипОбъектовАвторизации;
Элементы.ОбъектАвторизации.ВыбиратьТип = ТипОбъектовАвторизации = Неопределено;
КонецЕсли;
- // Чтение начальных значений свойств пользователя ИБ
+
+ // Чтение начальных значений свойств пользователя ИБ.
ПрочитатьПользователяИБ();
КонецЕсли;
Иначе
- // Открытие существующего элемента
+ // Открытие существующего элемента.
ПрочитатьПользователяИБ();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
+ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", Истина);
+
ОпределитьДействияВФорме();
ОпределитьНесоответствияПользователяСПользователемИБ();
- //** Установка постоянной доступности свойств
- Элементы.СвойстваПользователяИБ.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ);
- Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли);
- Элементы.УстановитьРолиНепосредственно.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли) И НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей();
+ // Установка постоянной доступности свойств.
+ Элементы.СвойстваПользователяИБ.Видимость =
+ ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ);
+
+ Элементы.ОтображениеРолей.Видимость =
+ ЗначениеЗаполнено(ДействияВФорме.Роли);
+
+ Элементы.УстановитьРолиНепосредственно.Видимость =
+ ЗначениеЗаполнено(ДействияВФорме.Роли) И НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей();
Элементы.УстановитьРолиНепосредственно.Доступность = ДействияВФорме.Роли = "Редактирование";
- ТолькоПросмотр = ТолькоПросмотр ИЛИ
- ДействияВФорме.Роли <> "Редактирование" И
- НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" ИЛИ
- ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" ) И
- ДействияВФорме.СвойстваЭлемента <> "Редактирование";
+ Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
+ Элементы.Недействителен.ТолькоПросмотр = Истина;
+ КонецЕсли;
- Если НЕ ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда
+ Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда
+ Элементы.ПользовательИнфБазыАутентификацияOpenID.Доступность = Ложь;
+ Элементы.ПользовательИнфБазыАутентификацияСтандартная.Доступность = Ложь;
+ КонецЕсли;
+
+ ТолькоПросмотр
+ = ТолькоПросмотр
+ ИЛИ ДействияВФорме.Роли <> "Редактирование"
+ И НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"
+ ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих")
+ И ДействияВФорме.СвойстваЭлемента <> "Редактирование";
+
+ Если НЕ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда
Элементы.ПользовательИнфБазыАутентификацияOpenID.Видимость = Ложь;
Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь;
Элементы.СвойстваПараметрыАутентификации1СПредприятия.Отображение = ОтображениеОбычнойГруппы.Нет;
@@ -107,10 +130,17 @@
ОчиститьСообщения();
- Если ДействияВФорме.Роли = "Редактирование" И Объект.УстановитьРолиНепосредственно И ПользовательИнфБазыРоли.Количество() = 0 Тогда
+ Если ДействияВФорме.Роли = "Редактирование"
+ И Объект.УстановитьРолиНепосредственно
+ И ПользовательИнфБазыРоли.Количество() = 0 Тогда
+
+ Ответ = Вопрос(
+ НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"),
+ РежимДиалогаВопрос.ДаНет,
+ ,
+ ,
+ НСтр("ru = 'Запись пользователя информационной базы'"));
- Ответ = Вопрос(НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"),
- РежимДиалогаВопрос.ДаНет, , , НСтр("ru = 'Запись пользователя информационной базы'"));
Если Ответ = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
КонецЕсли;
@@ -121,60 +151,54 @@
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
- Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда
- ЗаполнитьЗначенияСвойств(ТекущийОбъект, ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления"));
- КонецЕсли;
-
- Если ВнешниеПользователи.ОбъектАвторизацииИспользуется(Объект.ОбъектАвторизации, Объект.Ссылка) Тогда
-
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Объект информационной базы уже используется для другого внешнего пользователя.'"), ,
- "Объект.ОбъектАвторизации", ,
- Отказ);
- Возврат;
- КонецЕсли;
-
- ТекущийОбъект.ДополнительныеСвойства.Вставить("ГруппаНовогоВнешнегоПользователя", ГруппаНовогоВнешнегоПользователя);
-
- Если ДоступКИнформационнойБазеРазрешен Тогда
-
- ЗаписатьПользователяИБ(ТекущийОбъект, Отказ);
- Если НЕ Отказ Тогда
- Если ТекущийОбъект.ИдентификаторПользователяИБ <> СтарыйИдентификаторПользователяИБ Тогда
- ПараметрыЗаписи.Вставить("ДобавленПользовательИБ", ТекущийОбъект.ИдентификаторПользователяИБ);
- Иначе
- ПараметрыЗаписи.Вставить("ИзмененПользовательИБ", ТекущийОбъект.ИдентификаторПользователяИБ);
- КонецЕсли
- КонецЕсли;
-
- ИначеЕсли НЕ ЕстьСвязьСНесуществующимПользователемИБ ИЛИ
- ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда
-
- ТекущийОбъект.ИдентификаторПользователяИБ = Неопределено;
- КонецЕсли;
-
- УстановитьПривилегированныйРежим(Истина);
+ ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопирования", ЗначениеКопирования);
+ // Автообновление наименования внешнего пользователя.
ТекущееПредставлениеОбъектаАвторизации = Строка(ТекущийОбъект.ОбъектАвторизации);
+ Объект.Наименование = ТекущееПредставлениеОбъектаАвторизации;
ТекущийОбъект.Наименование = ТекущееПредставлениеОбъектаАвторизации;
-КонецПроцедуры
-
-&НаСервере
-Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
+ // Восстановление действий в форме, если они изменены на клиенте.
+ ОпределитьДействияВФорме();
- Если НЕ ДоступКИнформационнойБазеРазрешен И ПользовательИБСуществует Тогда
- УдалитьПользователяИБ(Отказ);
- Если НЕ Отказ Тогда
- ПараметрыЗаписи.Вставить("УдаленПользовательИБ", СтарыйИдентификаторПользователяИБ);
+ Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"
+ ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда
+
+ ОписаниеПользователяИБ = ОписаниеПользователяИБ();
+ ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля");
+
+ Если ДоступКИнформационнойБазеРазрешен Тогда
+ ОписаниеПользователяИБ.Вставить("Действие", "Записать");
+ Иначе
+ ОписаниеПользователяИБ.Вставить("Действие", "Удалить");
КонецЕсли;
+
+ ТекущийОбъект.ДополнительныеСвойства.Вставить(
+ "ОписаниеПользователяИБ", ОписаниеПользователяИБ);
КонецЕсли;
+ Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда
+
+ ЗаполнитьЗначенияСвойств(
+ ТекущийОбъект,
+ ОбщегоНазначения.ПолучитьЗначенияРеквизитов(
+ ТекущийОбъект.Ссылка,
+ "ПометкаУдаления"));
+ КонецЕсли;
+
+ ТекущийОбъект.ДополнительныеСвойства.Вставить(
+ "ГруппаНовогоВнешнегоПользователя", ГруппаНовогоВнешнегоПользователя);
+
+ УстановитьПривилегированныйРежим(Истина);
+
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
+ ПараметрыЗаписи.Вставить(
+ ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия);
+
ПрочитатьПользователяИБ();
ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи);
@@ -196,53 +220,50 @@
Оповестить("УдаленПользовательИБ", ПараметрыЗаписи.УдаленПользовательИБ, ЭтаФорма);
ИначеЕсли ПараметрыЗаписи.Свойство("ОчищенаСвязьСНесуществущимПользователемИБ") Тогда
- Оповестить("ОчищенаСвязьСНесуществущимПользователемИБ", ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма);
+
+ Оповестить(
+ "ОчищенаСвязьСНесуществущимПользователемИБ",
+ ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма);
КонецЕсли;
Если ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда
ОповеститьОбИзменении(ГруппаНовогоВнешнегоПользователя);
- Оповестить("Запись_ГруппыВнешнихПользователей", Новый Структура, ГруппаНовогоВнешнегоПользователя);
+
+ Оповестить(
+ "Запись_ГруппыВнешнихПользователей",
+ Новый Структура,
+ ГруппаНовогоВнешнегоПользователя);
+
ГруппаНовогоВнешнегоПользователя = Неопределено;
КонецЕсли;
УстановитьДоступностьСвойств();
- РазвернутьПодсистемыРолей();
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
+ ТекстОшибки = "";
+ Если ПользователиСлужебный.ОбъектАвторизацииИспользуется(
+ Объект.ОбъектАвторизации, Объект.Ссылка, , , ТекстОшибки) Тогда
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+ ТекстОшибки, , "Объект.ОбъектАвторизации", , Отказ);
+ КонецЕсли;
+
Если ДоступКИнформационнойБазеРазрешен Тогда
- Если НЕ Отказ И ПустаяСтрока(ПользовательИнфБазыИмя) Тогда
+ ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(
+ ОписаниеПользователяИБ(), Отказ);
+
+ ТекстСообщения = "";
+ Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора( , ТекстСообщения) Тогда
+
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"),
- ,
- "ПользовательИнфБазыИмя",
- ,
- Отказ);
- КонецЕсли;
-
- Если НЕ Отказ И ПользовательИнфБазыПароль <> Неопределено И Пароль <> ПодтверждениеПароля Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"),
- ,
- "Пароль",
- ,
- Отказ);
- КонецЕсли;
-
- Если ТребуетсяСоздатьПервогоАдминистратора() Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права.
- |Внешний пользователь не может быть полноправным.
- |Сначала создайте обычного пользователя-администратора.'"),
- ,
- "ДоступКИнформационнойБазеРазрешен",
- ,
- Отказ);
+ ТекстСообщения, , "ДоступКИнформационнойБазеРазрешен", , Отказ);
КонецЕсли;
КонецЕсли;
@@ -251,16 +272,7 @@
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
- Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда
- ПоказатьПодсистемыРолей = Ложь;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь;
- Иначе
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- КонецЕсли;
-
- СкрытьРольПолныеПрава = Истина;
- ОбновитьДеревоРолей();
+ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки);
КонецПроцедуры
@@ -277,8 +289,12 @@
&НаКлиенте
Процедура ДоступКИнформационнойБазеРазрешенПриИзменении(Элемент)
- Если НЕ ПользовательИБСуществует И ДоступКИнформационнойБазеРазрешен Тогда
- ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(ТекущееПредставлениеОбъектаАвторизации);
+ Если НЕ ПользовательИБСуществует
+ И ДоступКИнформационнойБазеРазрешен Тогда
+
+ ПользовательИнфБазыИмя =
+ ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(
+ ТекущееПредставлениеОбъектаАвторизации);
КонецЕсли;
УстановитьДоступностьСвойств();
@@ -303,8 +319,8 @@
Процедура УстановитьРолиНепосредственноПриИзменении(Элемент)
Если НЕ Объект.УстановитьРолиНепосредственно Тогда
- ПрочитатьПользователяИБ(, Истина);
- РазвернутьПодсистемыРолей();
+ ПрочитатьРолиПользователяИБ();
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецЕсли;
УстановитьДоступностьСвойств();
@@ -321,7 +337,7 @@
Процедура РолиПометкаПриИзменении(Элемент)
Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда
- ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей");
КонецЕсли;
КонецПроцедуры
@@ -335,78 +351,67 @@
&НаКлиенте
Процедура ПоказатьТолькоВыбранныеРоли(Команда)
- ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли;
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
-Процедура ПоказатьПодсистемыРолей(Команда)
+Процедура ГруппировкаРолейПоПодсистемам(Команда)
- ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
-Процедура УстановитьФлажки(Команда)
+Процедура ВключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Истина);
- Если ПоказатьТолькоВыбранныеРоли Тогда
- РазвернутьПодсистемыРолей();
- КонецЕсли;
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе");
+
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь);
КонецПроцедуры
&НаКлиенте
-Процедура СнятьФлажки(Команда)
+Процедура ИсключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Ложь);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе");
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-&НаСервере
-Функция ТребуетсяСоздатьПервогоАдминистратора()
-
- УстановитьПривилегированныйРежим(Истина);
-
- Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0;
-
-КонецФункции
-
&НаСервере
Процедура ОпределитьДействияВФорме()
ДействияВФорме = Новый Структура;
- ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование"
- ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих"
- ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование"
- Если Пользователи.ЭтоПолноправныйПользователь() ИЛИ
- ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда
- // Администратор
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("Роли", "");
+
+ // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих".
+ ДействияВФорме.Вставить("СвойстваПользователяИБ", "");
+
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("СвойстваЭлемента", "");
+
+ Если Пользователи.ЭтоПолноправныйПользователь()
+ ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда
+ // Администратор.
ДействияВФорме.Роли = "Редактирование";
ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех";
ДействияВФорме.СвойстваЭлемента = "Редактирование";
ИначеЕсли РольДоступна("ДобавлениеИзменениеВнешнихПользователей") Тогда
- // Менеджер внешних пользователей
+ // Менеджер внешних пользователей.
ДействияВФорме.Роли = "";
ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех";
ДействияВФорме.СвойстваЭлемента = "Просмотр";
- ИначеЕсли ЗначениеЗаполнено(ВнешниеПользователи.ТекущийВнешнийПользователь()) И
- Объект.Ссылка = ВнешниеПользователи.ТекущийВнешнийПользователь() Тогда
- // Свои свойства
+ ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда
+ // Свои свойства.
ДействияВФорме.Роли = "";
ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих";
ДействияВФорме.СвойстваЭлемента = "Просмотр";
@@ -417,235 +422,197 @@
ДействияВФорме.СвойстваЭлемента = "Просмотр";
КонецЕсли;
- Если НЕ ЗначениеЗаполнено(Объект.Ссылка) И НЕ ЗначениеЗаполнено(Объект.ОбъектАвторизации) Тогда
+ Если НЕ ЗначениеЗаполнено(Объект.Ссылка)
+ И НЕ ЗначениеЗаполнено(Объект.ОбъектАвторизации) Тогда
+
ДействияВФорме.СвойстваЭлемента = "Редактирование";
КонецЕсли;
ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме);
- // Проверка имен действий в форме
+ // Проверка имен действий в форме.
Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда
ДействияВФорме.Роли = "";
+
ИначеЕсли ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда
ДействияВФорме.Роли = "Просмотр";
КонецЕсли;
- Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда
+
+ Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,",
+ ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда
+
ДействияВФорме.СвойстваПользователяИБ = "";
КонецЕсли;
+
Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда
ДействияВФорме.СвойстваЭлемента = "";
КонецЕсли;
КонецПроцедуры
-&НаКлиентеНаСервереБезКонтекста
-Процедура ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(Контекст, Объект)
+&НаСервере
+Функция ОписаниеПользователяИБ()
- Если Объект.ОбъектАвторизации = Неопределено Тогда
- Объект.ОбъектАвторизации = Контекст.ТипОбъектовАвторизации;
+ ПользовательИнфБазыПолноеИмя = Объект.Наименование;
+
+ Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда
+ Результат = Пользователи.НовоеОписаниеПользователяИБ();
+ Пользователи.СкопироватьСвойстваПользователяИБ(
+ Результат,
+ ЭтаФорма,
+ ,
+ "УникальныйИдентификатор,
+ |Роли",
+ "ПользовательИнфБазы");
+
+ Иначе
+ // РедактированиеСвоих.
+ Результат = Новый Структура;
+ Результат.Вставить("Пароль", ПользовательИнфБазыПароль);
+ Результат.Вставить("Язык", ПользовательИнфБазыЯзык);
+ КонецЕсли;
+ Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля);
+
+ Если ДействияВФорме.Роли = "Редактирование"
+ И Объект.УстановитьРолиНепосредственно Тогда
+
+ ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль");
+ Результат.Вставить("Роли", ТекущиеРоли);
КонецЕсли;
- Если Контекст.ТекущееПредставлениеОбъектаАвторизации <> Строка(Объект.ОбъектАвторизации) Тогда
+ УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователяИБ(Истина);
+
+ Если УровеньДоступа = "ПолныйДоступ"
+ ИЛИ УровеньДоступа = "УправлениеСписком" Тогда
- Контекст.ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации);
-
- Если НЕ Контекст.ПользовательИБСуществует И Контекст.ДоступКИнформационнойБазеРазрешен Тогда
- Контекст.ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(Контекст.ТекущееПредставлениеОбъектаАвторизации);
+ Если НЕ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда
+ Результат.Вставить("АутентификацияСтандартная", Истина);
КонецЕсли;
+ Результат.Вставить("ПоказыватьВСпискеВыбора", Ложь);
+ Результат.Вставить("РежимЗапуска", "Авто");
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+&НаКлиентеНаСервереБезКонтекста
+Процедура ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(Форма, Объект)
+
+ Если Объект.ОбъектАвторизации = Неопределено Тогда
+ Объект.ОбъектАвторизации = Форма.ТипОбъектовАвторизации;
+ КонецЕсли;
+
+ Если Форма.ТекущееПредставлениеОбъектаАвторизации <> Строка(Объект.ОбъектАвторизации) Тогда
+
+ Форма.ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации);
+
+ Если НЕ Форма.ПользовательИБСуществует
+ И Форма.ДоступКИнформационнойБазеРазрешен Тогда
+
+ Форма.ПользовательИнфБазыИмя =
+ ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(
+ Форма.ТекущееПредставлениеОбъектаАвторизации);
+ КонецЕсли;
КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
-// Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия
+// Обработка пользователя ИБ.
&НаСервере
-Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь, ТолькоРоли = Ложь)
+Процедура ПрочитатьРолиПользователяИБ()
+
+ СвойстваПользователяИБ = Неопределено;
+
+ Пользователи.ПрочитатьПользователяИБ(
+ Объект.ИдентификаторПользователяИБ, СвойстваПользователяИБ);
+
+ ОбработатьИнтерфейсРолей("ЗаполнитьРоли", СвойстваПользователяИБ.Роли);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь)
УстановитьПривилегированныйРежим(Истина);
- ПрочитанныеРоли = Неопределено;
-
- Если ТолькоРоли Тогда
- Пользователи.ПрочитатьПользователяИБ(Объект.ИдентификаторПользователяИБ, , ПрочитанныеРоли);
- ЗаполнитьРоли(ПрочитанныеРоли);
- Возврат;
- КонецЕсли;
-
Пароль = "";
ПодтверждениеПароля = "";
ПрочитанныеСвойства = Неопределено;
- СтарыйИдентификаторПользователяИБ = Неопределено;
+ ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ();
ПользовательИБСуществует = Ложь;
ДоступКИнформационнойБазеРазрешен = Ложь;
- // Заполнение начальных значений свойств пользователяИБ у пользователя.
- Пользователи.ПрочитатьПользователяИБ(Неопределено, ПрочитанныеСвойства, ПрочитанныеРоли);
- ЗаполнитьЗначенияСвойств(ЭтаФорма, ПрочитанныеСвойства);
- ПользовательИнфБазыАутентификацияСтандартная = Истина;
+ // Заполнение начальных значений свойств пользователяИБ.
+ ОписаниеПользователяИБ.Роли = Новый Массив;
+ ОписаниеПользователяИБ.АутентификацияСтандартная = Истина;
Если ПриКопированииЭлемента Тогда
- Если Пользователи.ПрочитатьПользователяИБ(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда
- // Т.к. у скопированного пользователя есть связь с пользователемИБ,
- // то устанавливается будущая связь и у нового пользователя.
+ Если Пользователи.ПрочитатьПользователяИБ(
+ Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ,
+ ПрочитанныеСвойства) Тогда
+
+ // Установка связи пользователем ИБ.
ДоступКИнформационнойБазеРазрешен = Истина;
- // Т.к. пользовательИБ скопированного пользователя прочитан,
- // то копируются свойства и роли пользователяИБ.
- ЗаполнитьЗначенияСвойств(ЭтаФорма,
- ПрочитанныеСвойства,
- "ПользовательИнфБазыАутентификацияOpenID,
- |ПользовательИнфБазыАутентификацияСтандартная,
- |ПользовательИнфБазыЗапрещеноИзменятьПароль");
+
+ // Копирование свойств и ролей пользователяИБ.
+ ЗаполнитьЗначенияСвойств(
+ ОписаниеПользователяИБ,
+ ПрочитанныеСвойства,
+ "АутентификацияOpenID,
+ |АутентификацияСтандартная,
+ |ЗапрещеноИзменятьПароль,
+ |Язык,
+ |Роли");
КонецЕсли;
Объект.ИдентификаторПользователяИБ = Неопределено;
Иначе
- Если Пользователи.ПрочитатьПользователяИБ(Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда
-
+ Если Пользователи.ПрочитатьПользователяИБ(
+ Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда
+
ПользовательИБСуществует = Истина;
ДоступКИнформационнойБазеРазрешен = Истина;
- СтарыйИдентификаторПользователяИБ = Объект.ИдентификаторПользователяИБ;
- ЗаполнитьЗначенияСвойств(ЭтаФорма,
- ПрочитанныеСвойства,
- "ПользовательИнфБазыИмя,
- |ПользовательИнфБазыАутентификацияOpenID,
- |ПользовательИнфБазыАутентификацияСтандартная,
- |ПользовательИнфБазыЗапрещеноИзменятьПароль");
+ ЗаполнитьЗначенияСвойств(
+ ОписаниеПользователяИБ,
+ ПрочитанныеСвойства,
+ "Имя,
+ |АутентификацияOpenID,
+ |АутентификацияСтандартная,
+ |ЗапрещеноИзменятьПароль,
+ |Язык,
+ |Роли");
- Если ПрочитанныеСвойства.ПользовательИнфБазыПарольУстановлен Тогда
+ Если ПрочитанныеСвойства.ПарольУстановлен Тогда
Пароль = "**********";
ПодтверждениеПароля = "**********";
КонецЕсли;
КонецЕсли;
КонецЕсли;
- ЗаполнитьПредставлениеЯзыка(ПрочитанныеСвойства.ПользовательИнфБазыЯзык);
- ЗаполнитьРоли(ПрочитанныеРоли);
+ Пользователи.СкопироватьСвойстваПользователяИБ(
+ ЭтаФорма,
+ ОписаниеПользователяИБ,
+ ,
+ "УникальныйИдентификатор,
+ |Роли",
+ "ПользовательИнфБазы");
+
+ ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли);
КонецПроцедуры
-&НаСервере
-Процедура ЗаписатьПользователяИБ(ТекущийОбъект, Отказ)
-
- // Восстановление действий в форме, если они изменены на клиенте
- ОпределитьДействияВФорме();
-
- Если НЕ (ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" ИЛИ
- ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" )Тогда
- Возврат;
- КонецЕсли;
-
- УстановитьПривилегированныйРежим(Истина);
-
- НачальныеСвойства = Неопределено;
- НовыеСвойства = Неопределено;
- НовыеРоли = Неопределено;
-
- // Чтение старых свойств/заполнение начальных свойств пользователяИБ у пользователя.
- Пользователи.ПрочитатьПользователяИБ(ТекущийОбъект.ИдентификаторПользователяИБ, НовыеСвойства);
- НовыеСвойства.ПользовательИнфБазыПолноеИмя = Строка(ТекущийОбъект.ОбъектАвторизации);
-
- Пользователи.ПрочитатьПользователяИБ(Неопределено, НачальныеСвойства);
- ЗаполнитьЗначенияСвойств(НовыеСвойства,
- НачальныеСвойства,
- "ПользовательИнфБазыПоказыватьВСпискеВыбора,
- |ПользовательИнфБазыАутентификацияOpenID,
- |ПользовательИнфБазыАутентификацияСтандартная,
- |ПользовательИнфБазыАутентификацияОС,
- |ПользовательИнфБазыОсновнойИнтерфейс,
- |ПользовательИнфБазыРежимЗапуска");
-
- Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда
- ЗаполнитьЗначенияСвойств(НовыеСвойства,
- ЭтаФорма,
- "ПользовательИнфБазыИмя,
- |ПользовательИнфБазыАутентификацияOpenID,
- |ПользовательИнфБазыАутентификацияСтандартная,
- |ПользовательИнфБазыПароль,
- |ПользовательИнфБазыЗапрещеноИзменятьПароль");
- Иначе
- ЗаполнитьЗначенияСвойств(НовыеСвойства,
- ЭтаФорма,
- "ПользовательИнфБазыИмя,
- |ПользовательИнфБазыПароль");
- КонецЕсли;
-
- Если НЕ ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда
- НовыеСвойства.ПользовательИнфБазыАутентификацияСтандартная = Истина;
- КонецЕсли;
-
- НовыеСвойства.ПользовательИнфБазыЯзык = ПолучитьВыбранныйЯзык();
-
- Если ДействияВФорме.Роли = "Редактирование" И Объект.УстановитьРолиНепосредственно Тогда
- НовыеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль");
- КонецЕсли;
-
- // Попытка записи пользователя ИБ
- ОписаниеОшибки = "";
- Если Пользователи.ЗаписатьПользователяИБ(ТекущийОбъект.ИдентификаторПользователяИБ, НовыеСвойства, НовыеРоли, НЕ ПользовательИБСуществует, ОписаниеОшибки) Тогда
- Если НЕ ПользовательИБСуществует Тогда
- ТекущийОбъект.ИдентификаторПользователяИБ = НовыеСвойства.ПользовательИнфБазыУникальныйИдентификатор;
- ПользовательИБСуществует = Истина;
- КонецЕсли;
- Иначе
- Отказ = Истина;
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки);
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Функция УдалитьПользователяИБ(Отказ)
-
- УстановитьПривилегированныйРежим(Истина);
-
- ОписаниеОшибки = "";
- Если НЕ Пользователи.УдалитьПользователяИБ(СтарыйИдентификаторПользователяИБ, ОписаниеОшибки) Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки, , , , Отказ);
- КонецЕсли;
-
-КонецФункции
-
-&НаКлиентеНаСервереБезКонтекста
-Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя)
-
- КраткоеИмя = "";
- ПервыйПроходЦикла = Истина;
-
- Пока Истина Цикл
- Если НЕ ПервыйПроходЦикла Тогда
- КраткоеИмя = КраткоеИмя + ВРег(Лев(ПолноеИмя, 1));
- КонецЕсли;
- ПозицияПробела = Найти(ПолноеИмя, " ");
- Если ПозицияПробела = 0 Тогда
- Если ПервыйПроходЦикла Тогда
- КраткоеИмя = ПолноеИмя;
- КонецЕсли;
- Прервать;
- КонецЕсли;
-
- Если ПервыйПроходЦикла Тогда
- КраткоеИмя = Лев(ПолноеИмя, ПозицияПробела - 1);
- КонецЕсли;
-
- ПолноеИмя = Прав(ПолноеИмя, СтрДлина(ПолноеИмя) - ПозицияПробела);
-
- ПервыйПроходЦикла = Ложь;
- КонецЦикла;
-
- КраткоеИмя = СтрЗаменить(КраткоеИмя, " ", "");
-
- Возврат КраткоеИмя;
-
-КонецФункции
-
&НаСервере
Процедура ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи = Неопределено)
- //** Определение связи с несуществующим пользователем ИБ
- ЕстьНоваяСвязьСНесуществующимПользователемИБ = НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ);
+ // Определение связи с несуществующим пользователем ИБ.
+ ЕстьНоваяСвязьСНесуществующимПользователемИБ =
+ НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ);
+
Если ПараметрыЗаписи <> Неопределено
И ЕстьСвязьСНесуществующимПользователемИБ
И НЕ ЕстьНоваяСвязьСНесуществующимПользователемИБ Тогда
@@ -655,7 +622,7 @@
ЕстьСвязьСНесуществующимПользователемИБ = ЕстьНоваяСвязьСНесуществующимПользователемИБ;
Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда
- // Связь не может быть изменена
+ // Связь не может быть изменена.
Элементы.СвязьОбработкаНесоответствия.Видимость = Ложь;
Иначе
Элементы.СвязьОбработкаНесоответствия.Видимость = ЕстьСвязьСНесуществующимПользователемИБ;
@@ -666,67 +633,38 @@
////////////////////////////////////////////////////////////////////////////////
// Начальное заполнение, проверка заполнения, доступность свойств
-&НаСервере
-Процедура ЗаполнитьПредставлениеЯзыка(Язык)
-
- ПредставлениеЯзыка = "";
-
- Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл
-
- Если МетаданныеЯзыка.Имя = Язык Тогда
- ПредставлениеЯзыка = МетаданныеЯзыка.Синоним;
- Прервать;
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Функция ПолучитьВыбранныйЯзык()
-
- Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл
-
- Если МетаданныеЯзыка.Синоним = ПредставлениеЯзыка Тогда
- Возврат МетаданныеЯзыка.Имя;
- КонецЕсли;
- КонецЦикла;
-
- Возврат "";
-
-КонецФункции
-
-&НаСервере
-Процедура ЗаполнитьРоли(ПрочитанныеРоли)
-
- ПользовательИнфБазыРоли.Очистить();
-
- Для каждого Роль Из ПрочитанныеРоли Цикл
- ПользовательИнфБазыРоли.Добавить().Роль = Роль;
- КонецЦикла;
-
- Если ПоказатьТолькоВыбранныеРоли Тогда
- ОбновитьДеревоРолей();
- Иначе
- ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы());
- КонецЕсли;
-
-КонецПроцедуры
-
&НаКлиенте
Процедура УстановитьДоступностьСвойств()
- Элементы.ОбъектАвторизации.ТолькоПросмотр = ДействияВФорме.СвойстваЭлемента <> "Редактирование" ИЛИ
- ОбъектАвторизацииЗаданПриОткрытии ИЛИ
- ЗначениеЗаполнено(Объект.Ссылка) И
- ЗначениеЗаполнено(Объект.ОбъектАвторизации);
- Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.СвойстваПользователяИБ.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех";
- Элементы.Пароль.ТолькоПросмотр = ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь;
- Элементы.ПодтверждениеПароля.ТолькоПросмотр = ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь;
- Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+ Элементы.ОбъектАвторизации.ТолькоПросмотр
+ = ДействияВФорме.СвойстваЭлемента <> "Редактирование"
+ ИЛИ ОбъектАвторизацииЗаданПриОткрытии
+ ИЛИ ЗначениеЗаполнено(Объект.Ссылка)
+ И ЗначениеЗаполнено(Объект.ОбъектАвторизации);
- УстановитьТолькоПросмотрРолей(ЗапретРедактированияРолей ИЛИ ДействияВФорме.Роли <> "Редактирование" ИЛИ НЕ Объект.УстановитьРолиНепосредственно);
+ Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.СвойстваПользователяИБ.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех";
+
+ Элементы.Пароль.ТолькоПросмотр =
+ ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь;
+
+ Элементы.ПодтверждениеПароля.ТолькоПросмотр =
+ ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь;
+
+ Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ ОбработатьИнтерфейсРолей(
+ "УстановитьТолькоПросмотрРолей",
+ ЗапретРедактированияРолей
+ ИЛИ ДействияВФорме.Роли <> "Редактирование"
+ ИЛИ НЕ Объект.УстановитьРолиНепосредственно);
Элементы.ОсновныеСвойства.Доступность = ДоступКИнформационнойБазеРазрешен;
Элементы.РедактированиеИлиПросмотрРолей.Доступность = ДоступКИнформационнойБазеРазрешен;
@@ -740,275 +678,30 @@
КонецПроцедуры
-////////////////////////////////////////////////////////////////////////////////
-// Для работы интерфейса ролей
-
-&НаСервере
-Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь)
-
- Если ТаблицаЗначенийДляЧтения Тогда
- Возврат РеквизитФормыВЗначение("ПользовательИнфБазыРоли");
- КонецЕсли;
-
- Возврат ПользовательИнфБазыРоли;
-
-КонецФункции
-
-&НаКлиенте
-Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь)
-
- Если ТолькоПросмотрРолей <> Неопределено Тогда
- Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей;
- Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- КонецЕсли;
-
- Если РазрешитьПросмотрТолькоВыбранных Тогда
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь;
- КонецЕсли;
-
-КонецПроцедуры
-
-
-&НаКлиенте
-Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено);
-
- Если Коллекция = Неопределено Тогда
- Коллекция = Роли.ПолучитьЭлементы();
- КонецЕсли;
-
- // Развернуть все
- Для каждого Строка ИЗ Коллекция Цикл
- Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор());
- Если НЕ Строка.ЭтоРоль Тогда
- РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы());
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьДеревоРолей()
-
- Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина;
- ПоказатьТолькоВыбранныеРоли = Истина;
- КонецЕсли;
-
- // Запоминание текущей строки
- ТекущаяПодсистема = "";
- ТекущаяРоль = "";
- //
- Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда
- ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя);
- ТекущаяРоль = ТекущиеДанные.Имя;
- Иначе
- ТекущаяПодсистема = ТекущиеДанные.Имя;
- ТекущаяРоль = "";
- КонецЕсли;
- КонецЕсли;
-
- ТипПользователя = Перечисления.ТипыПользователей.ВнешнийПользователь;
- ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей, ТипПользователя).Скопировать();
- ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
- ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число"));
- ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли);
-
- ЗначениеВРеквизитФормы(ДеревоРолей, "Роли");
-
- Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево);
-
- // Восстановление текущей строки
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеПодсистемы = НайденныеСтроки[0];
- ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы);
- СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы);
- Если ЗначениеЗаполнено(ТекущаяРоль) Тогда
- НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль));
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор();
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли);
- СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли);
- Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор();
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли);
-
- Если Строка.ЭтоРоль Тогда
- Если СкрытьРольПолныеПрава И
- (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.НомерКартинки = 6;
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- КонецЕсли;
- Иначе
- Если Строка.Строки.Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.НомерКартинки = 5;
- Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений)
-
- Если СтрокаДереваЗначений.Родитель = Неопределено Тогда
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы();
- Иначе
- ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель);
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы();
- КонецЕсли;
-
- Возврат ДанныеФормыКоллекцияЭлементовДерева;
-
-КонецФункции
-
-
-&НаСервере
-Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить);
-
- Если ИдентификаторСтроки = Неопределено Тогда
- // Обработка всех
- КоллекцияРолей = КоллекцияРолей();
- КоллекцияРолей.Очистить();
- Если Добавить Тогда
- ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли();
- Для каждого ОписаниеРоли Из ВсеРоли Цикл
- Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда
- КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- Если ПоказатьТолькоВыбранныеРоли Тогда
- Если КоллекцияРолей.Количество() > 0 Тогда
- ОбновитьДеревоРолей();
- Иначе
- Роли.ПолучитьЭлементы().Очистить();
- КонецЕсли;
- // Возврат
- Возврат;
- // Возврат
- КонецЕсли;
- Иначе
- ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЕсли;
-
- ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы());
-
- Модифицированность = Истина;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить)
-
- НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль));
-
- Если Добавить Тогда
- Если НайденныеРоли.Количество() = 0 Тогда
- КоллекцияРолей().Добавить().Роль = Роль;
- КонецЕсли;
- Иначе
- Если НайденныеРоли.Количество() > 0 Тогда
- КоллекцияРолей().Удалить(НайденныеРоли[0]);
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить)
-
- Для каждого Строка Из Коллекция Цикл
- Если Строка.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(Строка.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- Если Строка.ЭтоРоль Тогда
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- Иначе
- ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы());
- Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.Пометка = Истина;
- Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл
- Если НЕ Элемент.Пометка Тогда
- Строка.Пометка = Ложь;
- Прервать;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
-
-КонецПроцедуры
-
&НаКлиенте
Процедура НедействителенПриИзменении(Элемент)
Если Объект.Недействителен Тогда
ДоступКИнформационнойБазеРазрешен = Ложь;
- КонецЕсли;
+ КонецЕсли;
УстановитьДоступностьСвойств();
КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// Для работы интерфейса ролей
+
+&НаСервере
+Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено)
+
+ ПараметрыДействия = Новый Структура;
+ ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр);
+ ПараметрыДействия.Вставить("Форма", ЭтаФорма);
+ ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИнфБазыРоли);
+ ПараметрыДействия.Вставить("ТипПользователя", Перечисления.ТипыПользователей.ВнешнийПользователь);
+ ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", Истина);
+
+ ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия);
+
+КонецПроцедуры
diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html
index 958331596..a19da741f 100644
--- a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html
+++ b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В этом списке ведется учет пользователей, которые работают с программой "извне". Их доступ, как правило, сильно ограничен, они не принимают активного участия в процессах учета, работают обособленно, не взаимодействуют между собой.
Основной способ создания и редактирования внешних пользователей через команду Внешний доступ, которая размещается в командной панели формы объектов, например, в карточке контрагента, физического лица. При выполнении команды сразу создается внешний пользователь, связанный с объектом, или открывается существующий внешний пользователь.
В случае большого количества внешних пользователей список может быть сгруппирован, например, по видам отношений с ними: партнеры, контрагенты и т.д. Для того чтобы увидеть всех внешних пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок Показывать внешних пользователей дочерних групп в нижней части списка. Для добавления новых групп внешних пользователей воспользуйтесь командами в левой части списка. Для добавления в группу большого числа внешних пользователей можно открыть форму группы и воспользоваться командой Подобрать. Один и тот же внешний пользователь может одновременно входить в разные группы внешних пользователей.
diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl
index 325d44621..c34684cd2 100644
--- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl
+++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -18,6 +20,7 @@
Если Не Параметры.Свойство("Отбор") Тогда
Параметры.Вставить("Отбор", Новый Структура("Недействителен", Ложь));
ПараметрИзменен = Истина;
+
ИначеЕсли Не Параметры.Отбор.Свойство("Недействителен") Тогда
Параметры.Отбор.Вставить("Недействителен", Ложь);
ПараметрИзменен = Истина;
@@ -28,6 +31,37 @@
ВыбраннаяФорма = "ФормаСписка";
КонецЕсли;
+ ИначеЕсли ВидФормы = "ФормаОбъекта" И Параметры.Свойство("ОбъектАвторизации") Тогда
+
+ СтандартнаяОбработка = Ложь;
+ ВыбраннаяФорма = "ФормаЭлемента";
+
+ НайденныйВнешнийПользователь = Неопределено;
+ ЕстьПравоДобавленияВнешнегоПользователя = Ложь;
+
+ ОбъектАвторизацииИспользуется = ПользователиСлужебный.ОбъектАвторизацииИспользуется(
+ Параметры.ОбъектАвторизации,
+ ,
+ НайденныйВнешнийПользователь,
+ ЕстьПравоДобавленияВнешнегоПользователя);
+
+ Если ОбъектАвторизацииИспользуется Тогда
+ Параметры.Вставить("Ключ", НайденныйВнешнийПользователь);
+
+ ИначеЕсли ЕстьПравоДобавленияВнешнегоПользователя Тогда
+
+ Параметры.Вставить(
+ "ОбъектАвторизацииНовогоВнешнегоПользователя", Параметры.ОбъектАвторизации);
+ Иначе
+ ОписаниеОшибкиКакПредупреждения =
+ НСтр("ru = 'Доступ к информационной базе запрещен и не предоставлялся.'");
+
+ ВызватьИсключение ОписаниеОшибкиКакПредупреждения;
+ КонецЕсли;
+
+ Параметры.Удалить("ОбъектАвторизации");
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl
index 6e0729be8..ce985518f 100644
--- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl
@@ -1,3 +1,16 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+
+Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ.
+ // Используются в обработчике события ПриЗаписи.
+
+////////////////////////////////////////////////////////////////////////////////
+// ПРОГРАММНЫЙ ИНТЕРФЕЙС
+
+// Программный интерфейс объекта реализован через ДополнительныеСвойства:
+//
+// ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи.
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -7,28 +20,32 @@
Возврат;
КонецЕсли;
- Если ИдентификаторПользователяИБ <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") И
- Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ, Ссылка) Тогда
- ВызватьИсключение НСтр("ru = 'Один пользователь информационной базы
- |может быть связан только с одним пользователем или внешним пользователем.'");
- КонецЕсли;
-
Если НЕ ЗначениеЗаполнено(ОбъектАвторизации) Тогда
- ВызватьИсключение НСтр("ru = 'Для внешнего пользователя не установлен объект авторизации.'");
+ ВызватьИсключение НСтр("ru = 'Для внешнего пользователя не установлен
+ |объект информационной базы.'");
Иначе
- Если ВнешниеПользователи.ОбъектАвторизацииИспользуется(ОбъектАвторизации, Ссылка) Тогда
- ВызватьИсключение НСтр("ru = 'Объект авторизации уже используется для другого внешнего пользователя.'");
+ ТекстОшибки = "";
+ Если ПользователиСлужебный.ОбъектАвторизацииИспользуется(
+ ОбъектАвторизации, Ссылка, , , ТекстОшибки) Тогда
+
+ ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецЕсли;
// Проверка, что объект авторизации не изменен.
Если НЕ ЭтоНовый() Тогда
СтарыйОбъектАвторизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ОбъектАвторизации");
- Если ЗначениеЗаполнено(СтарыйОбъектАвторизации) И СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда
- ВызватьИсключение НСтр("ru = 'Объект информационной базы нельзя изменять.'");
+
+ Если ЗначениеЗаполнено(СтарыйОбъектАвторизации)
+ И СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда
+
+ ВызватьИсключение НСтр("ru = 'У внешнего пользователя нельзя изменять
+ |объект информационной базы.'");
КонецЕсли;
КонецЕсли;
+ ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
+
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
@@ -37,40 +54,32 @@
Возврат;
КонецЕсли;
- // Обновление состава автоматической группы "Все внешние пользователи".
- ИзмененныеВнешниеПользователи = Неопределено;
- ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, ИзмененныеВнешниеПользователи);
- ИзмененныеВнешниеПользователи.Добавить(Ссылка);
- ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи);
-
- // Обновление состава автоматической группы <все объекты авторизации одного типа> (если есть).
- Если ЗначениеЗаполнено(ОбъектАвторизации) Тогда
- Запрос = Новый Запрос(
- "ВЫБРАТЬ
- | ГруппыВнешнихПользователей.Ссылка
- |ИЗ
- | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей
- |ГДЕ
- | ГруппыВнешнихПользователей.ВсеОбъектыАвторизации
- | И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации) = &ТипОбъектовАвторизации");
- Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(ОбъектАвторизации));
- Выборка = Запрос.Выполнить().Выбрать();
-
- Если Выборка.Следующий() Тогда
- ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Выборка.Ссылка, ИзмененныеВнешниеПользователи);
- ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи);
- КонецЕсли;
- КонецЕсли;
-
// Обновление состава группы нового внешнего пользователя (если задана).
Если ДополнительныеСвойства.Свойство("ГруппаНовогоВнешнегоПользователя") И
ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя) Тогда
+ Блокировка = Новый БлокировкаДанных;
+ ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей");
+ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
+ Блокировка.Заблокировать();
+
ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя.ПолучитьОбъект();
ОбъектГруппы.Состав.Добавить().ВнешнийПользователь = Ссылка;
ОбъектГруппы.Записать();
- ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(ОбъектГруппы.Ссылка, ИзмененныеВнешниеПользователи);
- ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи);
+ КонецЕсли;
+
+ // Обновление состава автоматической группы "Все внешние пользователи".
+ ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(
+ Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, Ссылка);
+
+ ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
+
+ Если НЕ УстановитьРолиНепосредственно
+ И НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда
+
+ Массив = Новый Массив;
+ Массив.Добавить(Ссылка);
+ ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(Массив);
КонецЕсли;
КонецПроцедуры
@@ -79,12 +88,25 @@
// Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ,
// кроме того, вход под этим пользователем ИБ приведет к ошибке.
- Если Пользователи.ПользовательИБСуществует(ИдентификаторПользователяИБ) Тогда
-
- Отказ = НЕ Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ);
- КонецЕсли;
+
+ ОписаниеПользователяИБ = Новый Структура;
+ ОписаниеПользователяИБ.Вставить("Действие", "Удалить");
+ ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
+
+ ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ, Истина);
+ ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
// Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки.
КонецПроцедуры
+Процедура ПриКопировании(ОбъектКопирования)
+
+ ДополнительныеСвойства.Вставить("ЗначениеКопирования", ОбъектКопирования.Ссылка);
+
+ ИдентификаторПользователяИБ = Неопределено;
+ ИдентификаторПользователяСервиса = Неопределено;
+
+КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo
index c8de89fcb..d194cf4f8 100644
--- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo
+++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo
@@ -132,26 +132,38 @@
Catalog.ВнешниеПользователи.Form.ФормаЭлементаCatalog.ВнешниеПользователи.Form.ФормаСпискаCatalog.ВнешниеПользователи.Form.ФормаСписка
-
- УдалитьПароль
+
+ ИдентификаторПользователяИБru
- Удалить Пароль
+ Идентификатор пользователя ИБ
+ Требуется для сопоставления элемента справочника ВнешниеПользователи пользователю ИБ
- String
-
- 30
-
+ UUIDru
- Это реквизит, который использовался в старой версии подсистемы для хранения паролей (используется для установки паролей пользователям информационной базы при конвертации данных)
+ Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы
-
- Use
+
+ Use
+
+
+ ИдентификаторПользователяСервиса
+
+ ru
+ Идентификатор пользователя сервиса
+
+
+ UUID
+
+
+
+
+ IndexUse
@@ -194,23 +206,26 @@
UseUse
-
- ИдентификаторПользователяИБ
+
+ УдалитьПарольru
- Идентификатор пользователя ИБ
+ Удалить Пароль
- Требуется для сопоставления элемента справочника ВнешниеПользователи пользователю ИБ
- UUID
+ String
+
+ 30
+ ru
- Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы
+ Это реквизит, который использовался в старой версии подсистемы для хранения паролей (используется для установки паролей пользователям информационной базы при конвертации данных)
-
+
+ UseUse
diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl
index 8b1378917..dc862d04c 100644
--- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl
@@ -1 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl
index e71a3e8fa..25b2b0267 100644
--- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl
@@ -7,12 +7,12 @@
Если Параметры.РежимВыбора Тогда
Элементы.Список.РежимВыбора = Истина;
- // Отбор не помеченных на удаление
+ // Отбор не помеченных на удаление.
Список.Отбор.Элементы[0].Использование = Истина;
Список.Отбор.Элементы[1].Использование = Параметры.Свойство("ВыборРодителя");
Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда
- // Режим подбора
+ // Режим подбора.
Заголовок = НСтр("ru = 'Подбор групп внешних пользователей'");
Элементы.Список.МножественныйВыбор = Истина;
Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный;
diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form
index 36eb701fa..a63d36435 100644
--- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form
@@ -930,7 +930,7 @@
Left
- Form.Command.УстановитьФлажки
+ Form.Command.ВключитьРолиNormalAutotrue
@@ -957,7 +957,7 @@
Left
- Form.Command.СнятьФлажки
+ Form.Command.ИсключитьРолиNormalAutotrue
@@ -1010,7 +1010,7 @@
Left
- Form.Command.ПоказатьПодсистемыРолей
+ Form.Command.ГруппировкаРолейПоПодсистемамNormalAutotrue
@@ -1272,10 +1272,6 @@
Lefttrue
-
- OnOpen
- ПриОткрытии
- OnCreateAtServerПриСозданииНаСервере
@@ -1320,23 +1316,6 @@
-
- ПоказатьТолькоВыбранныеРоли
-
- ru
- Показать только выбранные роли
-
- 1
-
- Boolean
-
-
- true
-
-
- true
-
- ДействияВФорме
@@ -1519,23 +1498,6 @@
ПоказатьПодсистемыРолей
-
- СкрытьРольПолныеПрава
-
- ru
- Скрыть роль полные права
-
- 8
-
- Boolean
-
-
- true
-
-
- true
-
- ПодобратьВнешнихПользователей
@@ -1586,15 +1548,15 @@
Auto
- СнятьФлажки
+ ИсключитьРолиru
- Снять флажки
+ Исключить роли5ru
- Снять флажки
+ Исключить ролиtrue
@@ -1604,7 +1566,7 @@
- СнятьФлажки
+ ИсключитьРолиtrue
@@ -1612,15 +1574,15 @@
Auto
- УстановитьФлажки
+ ВключитьРолиru
- Установить флажки
+ Включить роли6ru
- Установить флажки
+ Включить ролиtrue
@@ -1630,7 +1592,7 @@
- УстановитьФлажки
+ ВключитьРолиtrue
@@ -1638,15 +1600,15 @@
Auto
- ПоказатьПодсистемыРолей
+ ГруппировкаРолейПоПодсистемамru
- Группировка по подсистемам
+ По подсистемам2ru
- Показать группировку по подсистемам
+ Группировать список ролей по подсистемамtrue
@@ -1656,7 +1618,7 @@
- ПоказатьПодсистемыРолей
+ ГруппировкаРолейПоПодсистемамTextPicture
@@ -1672,9 +1634,5 @@
AfterWriteПослеЗаписи
-
- OnReadAtServer
- ПриЧтенииНаСервере
-
diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html
index 2e933a8a5..295913ac6 100644
--- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html
+++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Карточка группы внешних пользователей позволяет просматривать и редактировать свойства группы.
Для группы пользователей можно установить Тип участников (например, контрагенты). Группа может неявно включать всех внешних пользователей для установленного типа участников. Для этого нужно установить флажок Все.
При редактировании состава пользователей группы нужно учитывать, что они неявно входят в состав групп-родителей. Для добавления большого числа пользователей можно использовать команду Подобрать.
diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl
index e7b23185f..06b2d57df 100644
--- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl
@@ -4,33 +4,21 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- //** Установка начальных значений
- // перед загрузкой данных из настроек на сервере
- // для случая, когда данные ещё не были записаны и не загружаются
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере.
- // Для существующего - в ПриЧтенииНаСервере.
- Если Объект.Ссылка.Пустая() Тогда
- ИнициализацияФормы();
- КонецЕсли;
+ ОбработатьИнтерфейсРолей(
+ "НастроитьИнтерфейсРолейПриСозданииФормы", ЗначениеЗаполнено(Объект.Ссылка));
- //** Подготовка постоянных данных
+ // Подготовка вспомогательных данных.
ЗаполнитьСписокТиповОбъектовАвторизации();
- // Удаление роли ПолныеПрава из списка выбора и таблицы ролей
-
- //** Заполнение изменяемых данных
-
- Если Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка() И
- Объект.Родитель.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
+ Если Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка()
+ И Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка();
КонецЕсли;
ОпределитьДействияВФорме();
- //** Установка постоянной доступности свойств
+ // Установка постоянной доступности свойств.
Элементы.Наименование.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваЭлемента);
Элементы.Родитель.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваЭлемента);
@@ -38,36 +26,41 @@
Элементы.Состав.Видимость = ЗначениеЗаполнено(ДействияВФорме.СоставГруппы);
Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли);
- ЭтоГруппаВсеВнешниеПользователи = (Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи);
+ ЭтоГруппаВсеВнешниеПользователи =
+ Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи;
- ТолькоПросмотр = ТолькоПросмотр ИЛИ
- НЕ ЭтоГруппаВсеВнешниеПользователи И
- ДействияВФорме.Роли <> "Редактирование" И
- ДействияВФорме.СоставГруппы <> "Редактирование" И
- ДействияВФорме.СвойстваЭлемента <> "Редактирование";
+ Если ЭтоГруппаВсеВнешниеПользователи Тогда
+ Элементы.Наименование.ТолькоПросмотр = Истина;
+ Элементы.Родитель.ТолькоПросмотр = Истина;
+ Элементы.Комментарий.ТолькоПросмотр = Истина;
+ Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = Истина;
+ КонецЕсли;
- Элементы.Наименование.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СвойстваЭлемента <> "Редактирование";
- Элементы.Родитель.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СвойстваЭлемента <> "Редактирование";
- Элементы.Комментарий.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СвойстваЭлемента <> "Редактирование";
- Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СоставГруппы <> "Редактирование";
- Элементы.Состав.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СоставГруппы <> "Редактирование";
- Элементы.СоставПодобрать.Доступность = НЕ (ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СоставГруппы <> "Редактирование");
+ Если ТолькоПросмотр
+ ИЛИ НЕ ЭтоГруппаВсеВнешниеПользователи
+ И ДействияВФорме.Роли <> "Редактирование"
+ И ДействияВФорме.СоставГруппы <> "Редактирование"
+ И ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда
+
+ ТолькоПросмотр = Истина;
+ КонецЕсли;
- УстановитьТолькоПросмотрРолей(ДействияВФорме.Роли <> "Редактирование");
+ Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда
+ Элементы.Наименование.ТолькоПросмотр = Истина;
+ Элементы.Родитель.ТолькоПросмотр = Истина;
+ Элементы.Комментарий.ТолькоПросмотр = Истина;
+ КонецЕсли;
-КонецПроцедуры
-
-&НаКлиенте
-Процедура ПриОткрытии(Отказ)
+ Если ДействияВФорме.СоставГруппы <> "Редактирование" Тогда
+ Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = Истина;
+ КонецЕсли;
- УстановитьДоступностьСвойств();
+ ОбработатьИнтерфейсРолей(
+ "УстановитьТолькоПросмотрРолей",
+ ПользователиПереопределяемый.ЗапретРедактированияРолей()
+ ИЛИ ДействияВФорме.Роли <> "Редактирование");
-КонецПроцедуры
-
-&НаСервере
-Процедура ПриЧтенииНаСервере(ТекущийОбъект)
-
- ИнициализацияФормы();
+ УстановитьДоступностьСвойств(ЭтаФорма);
КонецПроцедуры
@@ -81,16 +74,7 @@
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
- Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда
- ПоказатьПодсистемыРолей = Ложь;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь;
- Иначе
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- КонецЕсли;
-
- СкрытьРольПолныеПрава = Истина;
- ОбновитьДеревоРолей();
+ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки);
КонецПроцедуры
@@ -102,7 +86,7 @@
Объект.ВсеОбъектыАвторизации = Ложь;
- УстановитьДоступностьСвойств();
+ УстановитьДоступностьСвойств(ЭтаФорма);
КонецПроцедуры
@@ -128,7 +112,7 @@
Объект.ТипОбъектовАвторизации = Неопределено;
КонецЕсли;
- УстановитьДоступностьСвойств();
+ УстановитьДоступностьСвойств(ЭтаФорма);
КонецПроцедуры
@@ -137,7 +121,10 @@
СтандартнаяОбработка = Ложь;
- ВыбранныйЭлемент = ВыбратьИзСписка(ТипыОбъектовАвторизации, Элемент, ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации));
+ ВыбранныйЭлемент = ВыбратьИзСписка(
+ ТипыОбъектовАвторизации,
+ Элемент,
+ ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации));
Если ВыбранныйЭлемент <> Неопределено Тогда
@@ -157,10 +144,13 @@
Объект.Состав.Очистить();
КонецЕсли;
- УстановитьДоступностьСвойств();
+ УстановитьДоступностьСвойств(ЭтаФорма);
КонецПроцедуры
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли
+
////////////////////////////////////////////////////////////////////////////////
// Для работы интерфейса ролей
@@ -168,7 +158,7 @@
Процедура РолиПометкаПриИзменении(Элемент)
Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда
- ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей");
КонецЕсли;
КонецПроцедуры
@@ -214,83 +204,70 @@
&НаКлиенте
Процедура ПоказатьТолькоВыбранныеРоли(Команда)
- ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли;
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
-Процедура ПоказатьПодсистемыРолей(Команда)
+Процедура ГруппировкаРолейПоПодсистемам(Команда)
- ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
-Процедура УстановитьФлажки(Команда)
+Процедура ВключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Истина);
- Если ПоказатьТолькоВыбранныеРоли Тогда
- РазвернутьПодсистемыРолей();
- КонецЕсли;
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе");
+
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь);
КонецПроцедуры
&НаКлиенте
-Процедура СнятьФлажки(Команда)
+Процедура ИсключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Ложь);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе");
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-&НаСервере
-Процедура ИнициализацияФормы()
-
- // Для нового элемента показать все роли, иначе только выбранные
- ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка);
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ЗначениеЗаполнено(Объект.Ссылка);
- //
- СкрытьРольПолныеПрава = Истина;
- ОбновитьДеревоРолей();
-
-КонецПроцедуры
-
&НаСервере
Процедура ОпределитьДействияВФорме()
ДействияВФорме = Новый Структура;
- ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование"
- ДействияВФорме.Вставить("СоставГруппы", ""); // "", "Просмотр", "Редактирование"
- ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование"
- Если Пользователи.ЭтоПолноправныйПользователь() ИЛИ
- ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда
- // Администратор
- ДействияВФорме.Роли = "Редактирование";
- ДействияВФорме.СоставГруппы = "Редактирование";
- ДействияВФорме.СвойстваЭлемента = "Редактирование";
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("Роли", "");
+
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("СоставГруппы", "");
+
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("СвойстваЭлемента", "");
+
+ Если Пользователи.ЭтоПолноправныйПользователь()
+ ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда
+ // Администратор.
+ ДействияВФорме.Роли = "Редактирование";
+ ДействияВФорме.СоставГруппы = "Редактирование";
+ ДействияВФорме.СвойстваЭлемента = "Редактирование";
ИначеЕсли РольДоступна("ДобавлениеИзменениеВнешнихПользователей") Тогда
- // Менеджер внешних пользователей
- ДействияВФорме.Роли = "";
- ДействияВФорме.СоставГруппы = "Редактирование";
- ДействияВФорме.СвойстваЭлемента = "Редактирование";
+ // Менеджер внешних пользователей.
+ ДействияВФорме.Роли = "";
+ ДействияВФорме.СоставГруппы = "Редактирование";
+ ДействияВФорме.СвойстваЭлемента = "Редактирование";
Иначе
- // Читатель внешних пользователей
- ДействияВФорме.Роли = "";
- ДействияВФорме.СоставГруппы = "Просмотр";
- ДействияВФорме.СвойстваЭлемента = "Просмотр";
+ // Читатель внешних пользователей.
+ ДействияВФорме.Роли = "";
+ ДействияВФорме.СоставГруппы = "Просмотр";
+ ДействияВФорме.СвойстваЭлемента = "Просмотр";
КонецЕсли;
ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме);
@@ -310,61 +287,90 @@
КонецПроцедуры
-&НаКлиенте
-Процедура УстановитьДоступностьСвойств()
+&НаКлиентеНаСервереБезКонтекста
+Процедура УстановитьДоступностьСвойств(Форма)
- Элементы.Состав.ТолькоПросмотр = Объект.ВсеОбъектыАвторизации;
+ Элементы = Форма.Элементы;
- Элементы.СоставПодобрать.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность;
- Элементы.КонтекстноеМенюСоставПодобрать.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность;
- Элементы.СоставДобавить.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность;
- Элементы.КонтекстноеМенюСоставДобавить.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность;
+ Элементы.Состав.ТолькоПросмотр = Форма.Объект.ВсеОбъектыАвторизации;
- Элементы.ВсеОбъектыАвторизации.Доступность = ЗначениеЗаполнено(ПредставлениеТипаОбъектовАвторизации) И НЕ ЗначениеЗаполнено(Объект.Родитель);
+ ДоступностьКоманд =
+ НЕ Форма.ТолькоПросмотр
+ И НЕ Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр
+ И НЕ Элементы.Состав.ТолькоПросмотр
+ И Элементы.Состав.Доступность;
+
+ Элементы.СоставПодобрать.Доступность = ДоступностьКоманд;
+ Элементы.КонтекстноеМенюСоставПодобрать.Доступность = ДоступностьКоманд;
+ Элементы.СоставДобавить.Доступность = ДоступностьКоманд;
+ Элементы.КонтекстноеМенюСоставДобавить.Доступность = ДоступностьКоманд;
+
+ Элементы.ВсеОбъектыАвторизации.Доступность =
+ ЗначениеЗаполнено(Форма.ПредставлениеТипаОбъектовАвторизации)
+ И НЕ ЗначениеЗаполнено(Форма.Объект.Родитель);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокТиповОбъектовАвторизации()
- Для каждого ТипСсылкиОбъектаАвторизации ИЗ Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы() Цикл
+ ТипыСсылокОбъектовАвторизации =
+ Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы();
- МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации);
+ Для каждого ТипСсылкиОбъектаАвторизации ИЗ ТипыСсылокОбъектовАвторизации Цикл
+ МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации);
МассивТипов = Новый Массив;
МассивТипов.Добавить(ТипСсылкиОбъектаАвторизации);
ОписаниеТипаСсылки = Новый ОписаниеТипов(МассивТипов);
- ТипыОбъектовАвторизации.Добавить(ОписаниеТипаСсылки.ПривестиЗначение(Неопределено), МетаданныеТипа.Синоним);
+ ТипыОбъектовАвторизации.Добавить(
+ ОписаниеТипаСсылки.ПривестиЗначение(Неопределено), МетаданныеТипа.Синоним);
КонецЦикла;
-
НайденныйЭлемент = ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации);
- ПредставлениеТипаОбъектовАвторизации = ?(НайденныйЭлемент = Неопределено, "", НайденныйЭлемент.Представление);
+
+ ПредставлениеТипаОбъектовАвторизации = ?(
+ НайденныйЭлемент = Неопределено, "", НайденныйЭлемент.Представление);
КонецПроцедуры
&НаСервере
Процедура УдалитьНеТипичныеВнешниеПользователи()
- Запрос = Новый Запрос(
+ Запрос = Новый Запрос;
+ Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(Объект.ТипОбъектовАвторизации));
+ Запрос.УстановитьПараметр(
+ "ВыбранныеВнешниеПользователи",
+ Объект.Состав.Выгрузить().ВыгрузитьКолонку("ВнешнийПользователь"));
+
+ Запрос.Текст =
"ВЫБРАТЬ
| ВнешниеПользователи.Ссылка
|ИЗ
| Справочник.ВнешниеПользователи КАК ВнешниеПользователи
|ГДЕ
| ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) <> &ТипОбъектовАвторизации
- | И ВнешниеПользователи.Ссылка В(&ВыбранныеВнешниеПользователи)");
- Запрос.УстановитьПараметр("ВыбранныеВнешниеПользователи", Объект.Состав.Выгрузить().ВыгрузитьКолонку("ВнешнийПользователь"));
- Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(Объект.ТипОбъектовАвторизации));
+ | И ВнешниеПользователи.Ссылка В(&ВыбранныеВнешниеПользователи)";
- Выборка = Запрос.Выполнить().Выбрать();
- Пока Выборка.Следующий() Цикл
- НайденныеСтроки = Объект.Состав.НайтиСтроки(Новый Структура("ВнешнийПользователь", Выборка.Ссылка));
- Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
- Объект.Состав.Удалить(Объект.Состав.Индекс(НайденнаяСтрока));
+ НачатьТранзакцию();
+ Попытка
+ Выборка = Запрос.Выполнить().Выбрать();
+ Пока Выборка.Следующий() Цикл
+
+ НайденныеСтроки = Объект.Состав.НайтиСтроки(
+ Новый Структура("ВнешнийПользователь", Выборка.Ссылка));
+
+ Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
+ Объект.Состав.Удалить(Объект.Состав.Индекс(НайденнаяСтрока));
+ КонецЦикла;
КонецЦикла;
- КонецЦикла;
+
+ ЗафиксироватьТранзакцию();
+ Исключение
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+ КонецПопытки;
КонецПроцедуры
@@ -373,7 +379,10 @@
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
- ПараметрыФормы.Вставить("ТекущаяСтрока", ?(Элементы.Состав.ТекущиеДанные = Неопределено, Неопределено, Элементы.Состав.ТекущиеДанные.ВнешнийПользователь));
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ?(
+ Элементы.Состав.ТекущиеДанные = Неопределено,
+ Неопределено,
+ Элементы.Состав.ТекущиеДанные.ВнешнийПользователь));
Если Подобрать Тогда
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
@@ -383,7 +392,12 @@
ПараметрыФормы.Вставить("ТипОбъектовАвторизации", Объект.ТипОбъектовАвторизации);
КонецЕсли;
- ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, ?(Подобрать, Элементы.Состав, Элементы.СоставВнешнийПользователь));
+ ОткрытьФорму(
+ "Справочник.ВнешниеПользователи.ФормаВыбора",
+ ПараметрыФормы,
+ ?(Подобрать,
+ Элементы.Состав,
+ Элементы.СоставВнешнийПользователь));
КонецПроцедуры
@@ -391,7 +405,10 @@
Процедура ОбработкаВыбораВнешнегоПользователя(ВыбранноеЗначение)
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
- Если Объект.Состав.НайтиСтроки(Новый Структура("ВнешнийПользователь", ВыбранноеЗначение)).Количество() = 0 Тогда
+
+ Отбор = Новый Структура("ВнешнийПользователь", ВыбранноеЗначение);
+ Если Объект.Состав.НайтиСтроки(Отбор).Количество() = 0 Тогда
+
Объект.Состав.Добавить().ВнешнийПользователь = ВыбранноеЗначение;
КонецЕсли;
КонецЕсли;
@@ -402,276 +419,15 @@
// Для работы интерфейса ролей
&НаСервере
-Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь)
+Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено)
- Если ТаблицаЗначенийДляЧтения Тогда
- Возврат Объект.Роли.Выгрузить();
- КонецЕсли;
+ ПараметрыДействия = Новый Структура;
+ ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр);
+ ПараметрыДействия.Вставить("Форма", ЭтаФорма);
+ ПараметрыДействия.Вставить("КоллекцияРолей", Объект.Роли);
+ ПараметрыДействия.Вставить("ТипПользователя", Перечисления.ТипыПользователей.ВнешнийПользователь);
+ ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", Истина);
- Возврат Объект.Роли;
-
-КонецФункции
-
-&НаСервере
-Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь)
-
- Если ТолькоПросмотрРолей <> Неопределено Тогда
- Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей;
- Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- КонецЕсли;
-
- Если РазрешитьПросмотрТолькоВыбранных Тогда
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь;
- КонецЕсли;
-
-КонецПроцедуры
-
-
-&НаКлиенте
-Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено);
-
- Если Коллекция = Неопределено Тогда
- Коллекция = Роли.ПолучитьЭлементы();
- КонецЕсли;
-
- // Развернуть все
- Для каждого Строка ИЗ Коллекция Цикл
- Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор());
- Если НЕ Строка.ЭтоРоль Тогда
- РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы());
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьДеревоРолей()
-
- Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина;
- ПоказатьТолькоВыбранныеРоли = Истина;
- КонецЕсли;
-
- // Запоминание текущей строки
- ТекущаяПодсистема = "";
- ТекущаяРоль = "";
- //
- Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда
- ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя);
- ТекущаяРоль = ТекущиеДанные.Имя;
- Иначе
- ТекущаяПодсистема = ТекущиеДанные.Имя;
- ТекущаяРоль = "";
- КонецЕсли;
- КонецЕсли;
-
- ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей).Скопировать();
- ДобавитьИменаНесуществующихРолей(ДеревоРолей);
- ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
- ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число"));
- ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли);
-
- ЗначениеВРеквизитФормы(ДеревоРолей, "Роли");
-
- Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево);
-
- // Восстановление текущей строки
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеПодсистемы = НайденныеСтроки[0];
- ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы);
- СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы);
- Если ЗначениеЗаполнено(ТекущаяРоль) Тогда
- НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль));
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор();
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли);
- СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли);
- Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор();
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли);
-
- Если Строка.ЭтоРоль Тогда
- Если СкрытьРольПолныеПрава
- И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда
-
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.НомерКартинки = 6;
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- КонецЕсли;
- Иначе
- Если Строка.Строки.Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.НомерКартинки = 5;
- Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений)
-
- Если СтрокаДереваЗначений.Родитель = Неопределено Тогда
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы();
- Иначе
- ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель);
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы();
- КонецЕсли;
-
- Возврат ДанныеФормыКоллекцияЭлементовДерева;
-
-КонецФункции
-
-
-&НаСервере
-Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить);
-
- Если ИдентификаторСтроки = Неопределено Тогда
- // Обработка всех
- КоллекцияРолей = КоллекцияРолей();
- КоллекцияРолей.Очистить();
- Если Добавить Тогда
- ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли();
- Для каждого ОписаниеРоли Из ВсеРоли Цикл
- Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда
- КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- Если ПоказатьТолькоВыбранныеРоли Тогда
- Если КоллекцияРолей.Количество() > 0 Тогда
- ОбновитьДеревоРолей();
- Иначе
- Роли.ПолучитьЭлементы().Очистить();
- КонецЕсли;
- // Возврат
- Возврат;
- // Возврат
- КонецЕсли;
- Иначе
- ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЕсли;
-
- ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы());
-
- Модифицированность = Истина;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить)
-
- НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль));
-
- Если Добавить Тогда
- Если НайденныеРоли.Количество() = 0 Тогда
- КоллекцияРолей().Добавить().Роль = Роль;
- КонецЕсли;
- Иначе
- Если НайденныеРоли.Количество() > 0 Тогда
- КоллекцияРолей().Удалить(НайденныеРоли[0]);
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить)
-
- Для каждого Строка Из Коллекция Цикл
- Если Строка.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(Строка.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- Если Строка.ЭтоРоль Тогда
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- Иначе
- ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы());
- Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.Пометка = Истина;
- Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл
- Если НЕ Элемент.Пометка Тогда
- Строка.Пометка = Ложь;
- Прервать;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьИменаНесуществующихРолей(ДеревоРолей)
-
- // Добавление несуществующих ролей
- Для каждого Строка Из КоллекцияРолей() Цикл
- Если ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, Строка.Роль), Истина).Количество() = 0 Тогда
- СтрокаДерева = ДеревоРолей.Строки.Вставить(0);
- СтрокаДерева.ЭтоРоль = Истина;
- СтрокаДерева.Имя = Строка.Роль;
- СтрокаДерева.Синоним = "? " + Строка.Роль;
- КонецЕсли;
- КонецЦикла;
+ ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия);
КонецПроцедуры
diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html
index d61edc124..8c601548d 100644
--- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html
+++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В этом списке ведется учет групп внешних пользователей.
Группы внешних пользователей могут использоваться для группировки большого числа внешних пользователей, а также когда нужно указывать не только внешнего пользователя, но и группу внешних пользователей, например, при настройке доступа.
Группы создаются плоским списком или иерархическим. В иерархическом списке, внешние пользователи вложенных групп неявно входят в группы-родители.
diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl
index 36e14991e..585dad22a 100644
--- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl
@@ -1,224 +1,19 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
Перем СтарыйРодитель; // Значение родителя группы до изменения для использования
-// в обработчике события ПриЗаписи.
+ // в обработчике события ПриЗаписи.
-Перем ИзменилсяСоставРолейГруппыВнешнихПользователей; // Флажок изменения состава ролей для использования
-// в обработчике события ПриЗаписи.
+Перем СтарыйСоставГруппыВнешнихПользователей; // Состав внешних пользователей группы внешних
+ // пользователей до изменения для использования
+ // в обработчике события ПриЗаписи.
+
+Перем СтарыйСоставРолейГруппыВнешнихПользователей; // Флажок изменения состава ролей для
+ // использования в обработчике события ПриЗаписи.
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
-// Блокирует недопустимые действия с предопределенной группой "Все внешние пользователи".
-Процедура ПередЗаписью(Отказ)
-
- Если ОбменДанными.Загрузка Тогда
- Возврат;
- КонецЕсли;
-
- Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
-
- ТипОбъектовАвторизации = Неопределено;
- ВсеОбъектыАвторизации = Ложь;
-
- Если НЕ Родитель.Пустая() Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" может быть только в корне.'"),
- , , , Отказ);
- Возврат;
- КонецЕсли;
- Если Состав.Количество() > 0 Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Добавление внешних пользователей в группу ""Все внешние пользователи"" не поддерживается.'"),
- , , , Отказ);
- Возврат;
- КонецЕсли;
- Иначе
- Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть родителем.'"),
- , , , Отказ);
- Возврат;
- КонецЕсли;
- СтарыйРодитель = ?(Ссылка.Пустая(), Неопределено, ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Родитель"));
-
- Если ТипОбъектовАвторизации = Неопределено Тогда
- ВсеОбъектыАвторизации = Ложь;
- ИначеЕсли ВсеОбъектыАвторизации И ЗначениеЗаполнено(Родитель) Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Родитель недопустим у группы для всех объектов информационной базы заданного типа.'"),
- , , , Отказ);
- Возврат;
- КонецЕсли;
-
- // Проверка уникальности группы всех объектов авторизации заданного типа
- Если ВсеОбъектыАвторизации Тогда
- Запрос = Новый Запрос(
- "ВЫБРАТЬ
- | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление
- |ИЗ
- | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей
- |ГДЕ
- | ГруппыВнешнихПользователей.Ссылка <> &Ссылка
- | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации = &ТипОбъектовАвторизации
- | И ГруппыВнешнихПользователей.ВсеОбъектыАвторизации");
- Запрос.УстановитьПараметр("Ссылка", Ссылка);
- Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации);
- Выборка = Запрос.Выполнить().Выбрать();
- Если Выборка.Следующий() Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Уже есть группа ""%1"" для всех объектов информационной базы типа ""%2"".'"),
- Выборка.СсылкаПредставление,
- ТипОбъектовАвторизации.Метаданные().Синоним),
- , , , Отказ);
- Возврат;
- КонецЕсли;
- КонецЕсли;
-
- // Проверка совпадения типа объектов авторизации с родителем (допустимо, если тип у родителя не задан)
- Если ЗначениеЗаполнено(Родитель) Тогда
- ТипОбъектовАвторизацииРодителя = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Родитель, "ТипОбъектовАвторизации");
- Если ТипОбъектовАвторизацииРодителя <> Неопределено И
- ТипОбъектовАвторизацииРодителя <> ТипОбъектовАвторизации Тогда
-
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Тип объектов информационной базы должен быть ""%1"", как у родителя ""%2"".'"),
- ТипОбъектовАвторизацииРодителя.Метаданные().Синоним, Родитель),
- , , , Отказ);
- Возврат;
- КонецЕсли;
- КонецЕсли;
-
- // Проверка, что при изменении типа объектов авторизации нет подчиненных элементов другого типа (очистка типа допустима)
- Если ТипОбъектовАвторизации <> Неопределено И ЗначениеЗаполнено(Ссылка) Тогда
- Запрос = Новый Запрос(
- "ВЫБРАТЬ
- | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление,
- | ГруппыВнешнихПользователей.ТипОбъектовАвторизации
- |ИЗ
- | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей
- |ГДЕ
- | ГруппыВнешнихПользователей.Родитель = &Ссылка
- | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации <> &ТипОбъектовАвторизации");
- Запрос.УстановитьПараметр("Ссылка", Ссылка);
- Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации);
- Выборка = Запрос.Выполнить().Выбрать();
- Если Выборка.Следующий() Тогда
- Если Выборка.ТипОбъектовАвторизации = Неопределено Тогда
- ПредставлениеДругогоТипаОбъектаАвторизации = НСтр("ru = '<Любой тип>'");
- Иначе
- ПредставлениеДругогоТипаОбъектаАвторизации = Выборка.ТипОбъектовАвторизации.Метаданные().Синоним;
- КонецЕсли;
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Есть дочерняя группа ""%1"" с другим типом объектов информационной базы ""%2"".'"),
- Выборка.СсылкаПредставление,
- ПредставлениеДругогоТипаОбъектаАвторизации),
- , , , Отказ);
- Возврат;
- КонецЕсли;
- КонецЕсли;
-
- // Определение изменения состава ролей.
- Если ЗначениеЗаполнено(Ссылка) Тогда
- Запрос = Новый Запрос(
- "ВЫБРАТЬ
- | НовыеРоли.Роль
- |ПОМЕСТИТЬ НовыеРоли
- |ИЗ
- | &НовыеРоли КАК НовыеРоли
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ ПЕРВЫЕ 1
- | ИСТИНА КАК Значение
- |ИЗ
- | НовыеРоли КАК НовыеРоли
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыВнешнихПользователей.Роли КАК СтарыеРоли
- | ПО (СтарыеРоли.Ссылка = &ГруппаВнешнихПользователей)
- | И (СтарыеРоли.Роль = НовыеРоли.Роль)
- |ГДЕ
- | СтарыеРоли.Роль ЕСТЬ NULL
- |
- |ОБЪЕДИНИТЬ ВСЕ
- |
- |ВЫБРАТЬ ПЕРВЫЕ 1
- | ИСТИНА
- |ИЗ
- | (ВЫБРАТЬ
- | ИСТИНА КАК ЗначениеИстина) КАК ЗначениеИстина
- | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыВнешнихПользователей.Роли КАК СтарыеРоли
- | ПО (СтарыеРоли.Ссылка = &ГруппаВнешнихПользователей)
- | ЛЕВОЕ СОЕДИНЕНИЕ НовыеРоли КАК НовыеРоли
- | ПО (СтарыеРоли.Роль = НовыеРоли.Роль)
- |ГДЕ
- | НовыеРоли.Роль ЕСТЬ NULL ");
- Запрос.УстановитьПараметр("ГруппаВнешнихПользователей", Ссылка);
- Запрос.УстановитьПараметр("НовыеРоли", Роли.Выгрузить());
- ИзменилсяСоставРолейГруппыВнешнихПользователей = НЕ Запрос.Выполнить().Пустой();
- Иначе
- ИзменилсяСоставРолейГруппыВнешнихПользователей = Истина;
- КонецЕсли;
-
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ПриЗаписи(Отказ)
-
- Если ОбменДанными.Загрузка Тогда
- Возврат;
- КонецЕсли;
-
- ИзмененныеВнешниеПользователи = Неопределено;
- ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Ссылка, ИзмененныеВнешниеПользователи);
-
- Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
-
- Запрос = Новый Запрос(
- "ВЫБРАТЬ
- | СоставыГруппПользователей.Пользователь
- |ИЗ
- | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
- |ГДЕ
- | СоставыГруппПользователей.ГруппаПользователей = ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)");
- ИзмененныеВнешниеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь");
-
- ИначеЕсли ИзменилсяСоставРолейГруппыВнешнихПользователей Тогда
-
- Запрос = Новый Запрос(
- "ВЫБРАТЬ
- | СоставыГруппПользователей.Пользователь
- |ИЗ
- | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
- |ГДЕ
- | СоставыГруппПользователей.Пользователь В(&ИзмененныеВнешниеПользователи)
- |
- |ОБЪЕДИНИТЬ
- |
- |ВЫБРАТЬ
- | ГруппыВнешнихПользователейСостав.ВнешнийПользователь
- |ИЗ
- | Справочник.ГруппыВнешнихПользователей.Состав КАК ГруппыВнешнихПользователейСостав
- |ГДЕ
- | ГруппыВнешнихПользователейСостав.Ссылка = &ГруппаВнешнихПользователей
- | И (НЕ ГруппыВнешнихПользователейСостав.ВнешнийПользователь.УстановитьРолиНепосредственно)");
- Запрос.УстановитьПараметр("ГруппаВнешнихПользователей", Ссылка);
- Запрос.УстановитьПараметр("ИзмененныеВнешниеПользователи", ИзмененныеВнешниеПользователи);
- ИзмененныеВнешниеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь");
- КонецЕсли;
-
- ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи);
-
- Если ЗначениеЗаполнено(СтарыйРодитель) И СтарыйРодитель <> Родитель Тогда
-
- ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(СтарыйРодитель, ИзмененныеВнешниеПользователи);
- ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи);
- КонецЕсли;
-
-КонецПроцедуры
-
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ПроверенныеРеквизитыОбъекта = Новый Массив;
@@ -266,3 +61,207 @@
КонецПроцедуры
+// Блокирует недопустимые действия с предопределенной группой "Все внешние пользователи".
+Процедура ПередЗаписью(Отказ)
+
+ Если ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
+
+ ТипОбъектовАвторизации = Неопределено;
+ ВсеОбъектыАвторизации = Ложь;
+
+ Если НЕ Родитель.Пустая() Тогда
+ ВызватьИсключение
+ НСтр("ru = 'Предопределенная группа ""Все внешние пользователи""
+ |может быть только в корне.'");
+ КонецЕсли;
+ Если Состав.Количество() > 0 Тогда
+ ВызватьИсключение
+ НСтр("ru = 'Добавление внешних пользователей в группу
+ |""Все внешние пользователи"" не поддерживается.'");
+ КонецЕсли;
+ Иначе
+ Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
+ ВызватьИсключение
+ НСтр("ru = 'Предопределенная группа ""Все внешние пользователи""
+ |не может быть родителем.'");
+ КонецЕсли;
+
+ Если ТипОбъектовАвторизации = Неопределено Тогда
+ ВсеОбъектыАвторизации = Ложь;
+
+ ИначеЕсли ВсеОбъектыАвторизации
+ И ЗначениеЗаполнено(Родитель) Тогда
+
+ ВызватьИсключение
+ НСтр("ru = 'Группа внешних пользователей, содержащая все объекты
+ |информационной базы заданного типа может быть только в корне.'");
+ КонецЕсли;
+
+ // Проверка уникальности группы всех объектов авторизации заданного типа.
+ Если ВсеОбъектыАвторизации Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.УстановитьПараметр("Ссылка", Ссылка);
+ Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации);
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление
+ |ИЗ
+ | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей
+ |ГДЕ
+ | ГруппыВнешнихПользователей.Ссылка <> &Ссылка
+ | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации = &ТипОбъектовАвторизации
+ | И ГруппыВнешнихПользователей.ВсеОбъектыАвторизации";
+
+ РезультатЗапроса = Запрос.Выполнить();
+ Если НЕ РезультатЗапроса.Пустой() Тогда
+
+ Выборка = РезультатЗапроса.Выбрать();
+ Выборка.Следующий();
+ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Группа внешних пользователей ""%1""
+ |для всех объектов информационной базы
+ |типа ""%2"" уже существует.'"),
+ Выборка.СсылкаПредставление,
+ ТипОбъектовАвторизации.Метаданные().Синоним);
+ КонецЕсли;
+ КонецЕсли;
+
+ // Проверка совпадения типа объектов авторизации с родителем
+ //(допустимо, если тип у родителя не задан).
+ Если ЗначениеЗаполнено(Родитель) Тогда
+ ТипОбъектовАвторизацииРодителя = ОбщегоНазначения.ПолучитьЗначениеРеквизита(
+ Родитель, "ТипОбъектовАвторизации");
+
+ Если ТипОбъектовАвторизацииРодителя <> Неопределено
+ И ТипОбъектовАвторизацииРодителя <> ТипОбъектовАвторизации Тогда
+
+ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'У нижестоящей группы внешних пользователей тип объектов
+ |информационной базы должен быть ""%1"",
+ |как у вышестоящей группы внешних пользователей ""%2"".'"),
+ ТипОбъектовАвторизацииРодителя.Метаданные().Синоним,
+ Родитель);
+ КонецЕсли;
+ КонецЕсли;
+
+ // Проверка, что при изменении типа объектов авторизации
+ // нет подчиненных элементов другого типа (очистка типа допустима).
+ Если ТипОбъектовАвторизации <> Неопределено
+ И ЗначениеЗаполнено(Ссылка) Тогда
+
+ Запрос = Новый Запрос;
+ Запрос.УстановитьПараметр("Ссылка", Ссылка);
+ Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации);
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление,
+ | ГруппыВнешнихПользователей.ТипОбъектовАвторизации
+ |ИЗ
+ | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей
+ |ГДЕ
+ | ГруппыВнешнихПользователей.Родитель = &Ссылка
+ | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации <> &ТипОбъектовАвторизации";
+
+ РезультатЗапроса = Запрос.Выполнить();
+ Если НЕ РезультатЗапроса.Пустой() Тогда
+
+ Выборка = РезультатЗапроса.Выбрать();
+ Выборка.Следующий();
+
+ Если Выборка.ТипОбъектовАвторизации = Неопределено Тогда
+ ПредставлениеДругогоТипаОбъектаАвторизации = НСтр("ru = '<Любой тип>'");
+ Иначе
+ ПредставлениеДругогоТипаОбъектаАвторизации =
+ Выборка.ТипОбъектовАвторизации.Метаданные().Синоним;
+ КонецЕсли;
+ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'У группы внешних пользователей ""%1""
+ |невозможно изменить тип объектов информационной базы,
+ |так как существует нижестоящая группа внешних пользователей
+ |""%2"" с другим типом
+ |объектов информационной базы ""%3"".'"),
+ Наименование,
+ Выборка.СсылкаПредставление,
+ ПредставлениеДругогоТипаОбъектаАвторизации);
+ КонецЕсли;
+ КонецЕсли;
+
+ СтарыйРодитель = ?(
+ Ссылка.Пустая(),
+ Неопределено,
+ ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Родитель") );
+
+ Если ЗначениеЗаполнено(Ссылка)
+ И Ссылка <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
+
+ СтарыйСоставГруппыВнешнихПользователей =
+ ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Состав").Выгрузить();
+ КонецЕсли;
+ КонецЕсли;
+
+ Если НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда
+ СтарыйСоставРолейГруппыВнешнихПользователей =
+ ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Роли").Выгрузить();
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПриЗаписи(Отказ)
+
+ Если ОбменДанными.Загрузка Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда
+ ИзменилсяСоставРолейГруппыВнешнихПользователей = Ложь;
+ Иначе
+ ИзменилсяСоставРолейГруппыВнешнихПользователей =
+ ПользователиСлужебный.РазличияЗначенийКолонки(
+ "Роль",
+ Роли.Выгрузить(),
+ СтарыйСоставРолейГруппыВнешнихПользователей).Количество() <> 0;
+ КонецЕсли;
+
+ Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
+
+ Если ИзменилсяСоставРолейГруппыВнешнихПользователей Тогда
+ ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(Ссылка);
+ Иначе
+ Выборка = Справочники.ГруппыВнешнихПользователей.Выбрать();
+ Пока Выборка.Следующий() Цикл
+ ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(Выборка.Ссылка);
+ КонецЦикла;
+ ПользователиСлужебный.ОбновитьРолиВнешнихПользователей();
+ КонецЕсли;
+ Иначе
+ Если ВсеОбъектыАвторизации Тогда
+ ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(Ссылка);
+ Иначе
+ ИзмененияСостава = ПользователиСлужебный.РазличияЗначенийКолонки(
+ "ВнешнийПользователь",
+ Состав.Выгрузить(),
+ СтарыйСоставГруппыВнешнихПользователей);
+
+ ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(
+ Ссылка, ИзмененияСостава);
+
+ Если ЗначениеЗаполнено(СтарыйРодитель) И СтарыйРодитель <> Родитель Тогда
+ ИзмененияСоставаПриИзмененииРодителя = Неопределено;
+ ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(СтарыйРодитель);
+ КонецЕсли;
+ КонецЕсли;
+
+ Если ИзменилсяСоставРолейГруппыВнешнихПользователей Тогда
+ ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(Ссылка);
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl
index 9651dcb08..ba3d211bb 100644
--- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl
@@ -4,6 +4,11 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Выбранные", Параметры.Выбранные);
Запрос.УстановитьПараметр("ПользовательГрупп", Параметры.ПользовательГрупп);
@@ -51,6 +56,7 @@
| ИНАЧЕ ГруппыДоступа.Пользователь = &ПользовательГрупп
| КОНЕЦ
| И НЕ ГруппыДоступа.ПометкаУдаления
+ | И НЕ ГруппыДоступа.Профиль.ПометкаУдаления
| И ВЫБОР
| КОГДА ГруппыДоступа.ТипПользователей = НЕОПРЕДЕЛЕНО
| ТОГДА ИСТИНА
@@ -87,18 +93,23 @@
НовоеДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Папки = НовоеДерево.Строки.НайтиСтроки(Новый Структура("ЭтоГруппа", Истина), Истина);
+
УдалитьПапки = Новый Соответствие;
НетПапок = Истина;
+
Для каждого Папка Из Папки Цикл
Если Папка.Родитель = Неопределено
И Папка.Строки.Количество() = 0
ИЛИ Папка.Строки.НайтиСтроки(Новый Структура("ЭтоГруппа", Ложь), Истина).Количество() = 0 Тогда
- //
- УдалитьПапки.Вставить(?(Папка.Родитель = Неопределено, НовоеДерево.Строки, Папка.Родитель.Строки), Папка);
+
+ УдалитьПапки.Вставить(
+ ?(Папка.Родитель = Неопределено, НовоеДерево.Строки, Папка.Родитель.Строки),
+ Папка);
Иначе
НетПапок = Ложь;
КонецЕсли;
КонецЦикла;
+
Для каждого УдалитьПапку Из УдалитьПапки Цикл
Если УдалитьПапку.Ключ.Индекс(УдалитьПапку.Значение) > -1 Тогда
УдалитьПапку.Ключ.Удалить(УдалитьПапку.Значение);
@@ -142,15 +153,18 @@
&НаКлиенте
Процедура ПриВыборе()
- Если Элементы.ГруппыДоступа.ТекущиеДанные <> Неопределено Тогда
- Если Элементы.ГруппыДоступа.ТекущиеДанные.ЭтоГруппа Тогда
+ ТекущиеДанные = Элементы.ГруппыДоступа.ТекущиеДанные;
+
+ Если ТекущиеДанные <> Неопределено Тогда
+ Если ТекущиеДанные.ЭтоГруппа Тогда
+
Если Элементы.ГруппыДоступа.Развернут(Элементы.ГруппыДоступа.ТекущаяСтрока) Тогда
Элементы.ГруппыДоступа.Свернуть(Элементы.ГруппыДоступа.ТекущаяСтрока);
Иначе
Элементы.ГруппыДоступа.Развернуть(Элементы.ГруппыДоступа.ТекущаяСтрока);
КонецЕсли;
Иначе
- Закрыть(Элементы.ГруппыДоступа.ТекущиеДанные.Ссылка);
+ Закрыть(ТекущиеДанные.Ссылка);
КонецЕсли;
КонецЕсли;
diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl
index 25e74d7fa..081797425 100644
--- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl
@@ -4,6 +4,11 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
Отказ = НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей();
ВыполнитьПроверкуПравДоступа("АдминистрированиеДанных", Метаданные);
@@ -34,21 +39,23 @@
УстановитьПривилегированныйРежим(Истина);
КоличествоДанных = 0;
- УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных);
+ УправлениеДоступомСлужебный.ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных);
Если КоличествоДанных > 0 Тогда
ВыполненоШаговОбновления = 1;
КонецЕсли;
Начало = ТекущаяДатаСеанса();
- Пока РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа).Использование
+ МетаданныеЗадания = Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа;
+
+ Пока РегламентныеЗадания.НайтиПредопределенное(МетаданныеЗадания).Использование
И Начало + 15 > ТекущаяДатаСеанса() Цикл
ВыполненоШаговОбновления = ВыполненоШаговОбновления + 1;
- УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступа();
+ УправлениеДоступомСлужебный.ЗаполнениеДанныхДляОграниченияДоступа();
КонецЦикла;
- ОбновлениеТребуется = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа).Использование;
+ ОбновлениеТребуется = РегламентныеЗадания.НайтиПредопределенное(МетаданныеЗадания).Использование;
Элементы.ВыполнениеЗавершено.Видимость = НЕ ОбновлениеТребуется;
Возврат ОбновлениеТребуется;
diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl
index 528d6d079..b39b80186 100644
--- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl
@@ -4,9 +4,16 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
Если НЕ ПравоДоступа("Изменение", Метаданные.Справочники.ГруппыДоступа)
- ИЛИ ПараметрыДоступа("Изменение", Метаданные.Справочники.ГруппыДоступа, "Ссылка").ОграничениеУсловием Тогда
- //
+
+ ИЛИ ПараметрыДоступа("Изменение", Метаданные.Справочники.ГруппыДоступа,
+ "Ссылка").ОграничениеУсловием Тогда
+
ТолькоПросмотр = Истина;
КонецЕсли;
@@ -15,7 +22,12 @@
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
- Если ТекущийОбъект.Ссылка = УправлениеДоступом.РодительПерсональныхГруппДоступа(Истина) Тогда
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ТекущийОбъект.Ссылка = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(Истина) Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
@@ -26,14 +38,17 @@
НаименованиеПерсональныхГруппДоступа = Неопределено;
- Если Объект.Ссылка <> УправлениеДоступом.РодительПерсональныхГруппДоступа(Истина, НаименованиеПерсональныхГруппДоступа)
- И Объект.Наименование = НаименованиеПерсональныхГруппДоступа Тогда
- //
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Это наименование зарезервировано.'"),
- ,
- "Объект.Наименование",
- ,
- Отказ);
+ Если Объект.Ссылка <> УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(
+ Истина, НаименованиеПерсональныхГруппДоступа)
+ И
+ Объект.Наименование = НаименованиеПерсональныхГруппДоступа Тогда
+
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+ НСтр("ru = 'Это наименование зарезервировано.'"),
+ ,
+ "Объект.Наименование",
+ ,
+ Отказ);
КонецЕсли;
КонецПроцедуры
diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html
index 5c428dc53..e0447921f 100644
--- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html
+++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Для группы доступа задается профиль, список участников и ограничения доступа.
Профиль определит права (списком ролей) и возможности ограничения прав по "разрезам" (видам доступа), например, ограничения по видам Организации, Склады, ... Виды доступа из профиля будут добавлены в группу доступа автоматически.
diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl
index 829d276e6..97b74d0bb 100644
--- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl
@@ -4,19 +4,25 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
НачальнаяНастройкаПриЧтенииИСоздании(Объект);
КонецЕсли;
- //** Подготовка постоянных коллекций
+ // Заполнение вспомогательных данных.
- // Заполнение списка видов доступа через права по значениям доступа
- Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина)) Цикл
+ // Заполнение списка видов доступа через права по значениям доступа.
+ Отбор = Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина);
+ Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Отбор) Цикл
ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа);
КонецЦикла;
- // Заполнение типов значений доступа всех видов доступа
- Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа() Цикл
+ // Заполнение типов значений доступа всех видов доступа.
+ Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа() Цикл
Для каждого Тип Из СвойстваВидаДоступа.ВидДоступа.ТипЗначения.Типы() Цикл
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип);
@@ -26,7 +32,9 @@
Если Метаданные.Перечисления.Найти(МетаданныеТипа.Имя) = МетаданныеТипа Тогда
ПредставлениеТипа = МетаданныеТипа.Представление();
Иначе
- ПредставлениеТипа = ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), МетаданныеТипа.ПредставлениеОбъекта, МетаданныеТипа.Представление());
+ ПредставлениеТипа = ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта),
+ МетаданныеТипа.ПредставлениеОбъекта,
+ МетаданныеТипа.Представление());
КонецЕсли;
НоваяСтрока = ТипыЗначенийДоступаВидовДоступа.Добавить();
@@ -37,24 +45,29 @@
КонецЦикла;
ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей();
- СправочникВнешниеПользователиДоступен = ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи);
- СписокТиповПользователей.Добавить(Тип("СправочникСсылка.Пользователи"), "Пользователи");
- СписокТиповПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи"), "ВнешниеПользователи");
+ СправочникВнешниеПользователиДоступен = ПравоДоступа(
+ "Просмотр", Метаданные.Справочники.ВнешниеПользователи);
- // Заполнение списка выбора типа пользователей
+ СписокТиповПользователей.Добавить(
+ Тип("СправочникСсылка.Пользователи"),
+ "Пользователи");
+
+ СписокТиповПользователей.Добавить(
+ Тип("СправочникСсылка.ВнешниеПользователи"),
+ "ВнешниеПользователи");
+
+ // Заполнение списка выбора типа пользователей.
ЗаполнитьСписокТиповПользователей();
- УстановитьПривилегированныйРежим(Истина);
+ // Установка постоянной доступности свойств.
- //** Установка постоянной доступности свойств
-
- // Определение необходимости настройки ограничений доступа
+ // Определение необходимости настройки ограничений доступа.
Если НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда
Элементы.Доступ.Видимость = Ложь;
КонецЕсли;
- // Установка доступности при открытии формы только для просмотра
+ // Установка доступности при открытии формы только для просмотра.
Элементы.ПользователиПодобрать.Доступность = НЕ ТолькоПросмотр;
Элементы.КонтекстноеМенюПользователиПодобрать.Доступность = НЕ ТолькоПросмотр;
Элементы.ВидыДоступаИзменить.Доступность = НЕ ТолькоПросмотр;
@@ -67,12 +80,13 @@
Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы")
И Объект.Профиль <> ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор") Тогда
- Ответ = Вопрос(НСтр("ru = 'У группы доступа Администраторы должен быть профиль Администратор.
- |
- |Установить профиль в группе доступа (нет - открыть только для просмотра)?'"),
- РежимДиалогаВопрос.ДаНет,
- ,
- КодВозвратаДиалога.Нет);
+ Ответ = Вопрос(
+ НСтр("ru = 'У группы доступа Администраторы должен быть профиль Администратор.
+ |
+ |Установить профиль в группе доступа (нет - открыть только для просмотра)?'"),
+ РежимДиалогаВопрос.ДаНет,
+ ,
+ КодВозвратаДиалога.Нет);
Если Ответ = КодВозвратаДиалога.Да Тогда
Объект.Профиль = ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор");
@@ -82,14 +96,16 @@
КонецЕсли;
КонецЕсли;
- Если НЕ ТолькоПросмотр И ИзменилсяСоставВидовДоступаПриЧтении Тогда
+ Если НЕ ТолькоПросмотр
+ И ИзменилсяСоставВидовДоступаПриЧтении Тогда
- Ответ = Вопрос(НСтр("ru = 'Изменился состав видов доступа профиля этой группы доступа.
- |
- |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"),
- РежимДиалогаВопрос.ДаНет,
- ,
- КодВозвратаДиалога.Нет);
+ Ответ = Вопрос(
+ НСтр("ru = 'Изменился состав видов доступа профиля этой группы доступа.
+ |
+ |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"),
+ РежимДиалогаВопрос.ДаНет,
+ ,
+ КодВозвратаДиалога.Нет);
Если Ответ = КодВозвратаДиалога.Да Тогда
ОбновитьСоставВидовДоступа();
@@ -102,7 +118,7 @@
И НЕ ЗначениеЗаполнено(Объект.Ссылка)
И ТипЗнч(ВладелецФормы) = Тип("ТаблицаФормы")
И ВладелецФормы.Родитель.Параметры.Свойство("Профиль") Тогда
- //
+
Если ЗначениеЗаполнено(ВладелецФормы.Родитель.Параметры.Профиль) Тогда
Объект.Профиль = ВладелецФормы.Родитель.Параметры.Профиль;
КонецЕсли;
@@ -113,6 +129,11 @@
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
НачальнаяНастройкаПриЧтенииИСоздании(ТекущийОбъект);
КонецПроцедуры
@@ -121,14 +142,17 @@
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
- // Ответственный не может менять что-либо, кроме состава пользователей
+ // Ответственный не может менять что-либо, кроме состава пользователей.
// В целях предотвращения изменения группы доступа на клиенте в запрещенных
- // частях, выполняется повторное чтение объекта
+ // частях, выполняется повторное чтение объекта.
ВосстановитьОбъектБезУчастниковГруппы(ТекущийОбъект);
КонецЕсли;
ТекущийОбъект.Пользователи.Очистить();
- Если ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда
+
+ Если ТекущийОбъект.Ссылка <> Справочники.ГруппыДоступа.Администраторы
+ И ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда
+
Если ИспользованиеПерсональногоДоступа Тогда
ТекущийОбъект.Пользователи.Добавить().Пользователь = ТекущийОбъект.Пользователь;
КонецЕсли;
@@ -138,10 +162,6 @@
КонецЦикла;
КонецЕсли;
- Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
- Объект.Администратор = Неопределено;
- КонецЕсли;
-
КонецПроцедуры
&НаСервере
@@ -149,6 +169,12 @@
ЗаполнитьСвойстваВидовДоступаВФорме();
+ Если НЕ Объект.ПометкаУдаления
+ И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Профиль, "ПометкаУдаления") = Истина Тогда
+
+ ПараметрыЗаписи.Вставить("ПредупредитьЧтоПрофильПомеченНаУдаление");
+ КонецЕсли;
+
КонецПроцедуры
&НаКлиенте
@@ -156,6 +182,12 @@
Оповестить("Запись_ГруппыДоступа", Новый Структура, Объект.Ссылка);
+ Если ПараметрыЗаписи.Свойство("ПредупредитьЧтоПрофильПомеченНаУдаление") Тогда
+
+ Предупреждение(НСтр("ru = 'Группа доступа не влияет на права участников
+ |так как её профиль помечен на удаление.'"));
+ КонецЕсли;
+
КонецПроцедуры
&НаСервере
@@ -243,7 +275,7 @@
Пользователи.НайтиНеоднозначныхПользователейИБ();
- // Проверка пустого списка пользователей ИБ в группе доступа Администраторы
+ // Проверка пустого списка пользователей ИБ в группе доступа Администраторы.
УстановитьПривилегированныйРежим(Истина);
НайденПользовательИБ = Ложь;
@@ -259,6 +291,7 @@
КонецЦикла;
Если НЕ НайденПользовательИБ Тогда
+
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки,
"ПользователиГруппы",
НСтр("ru = 'В группе доступа Администраторы
@@ -302,8 +335,10 @@
КонецЕсли;
// Проверка наличия повторяющихся значений.
- НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(
- Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа));
+ Отбор = Новый Структура;
+ Отбор.Вставить("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа);
+ Отбор.Вставить("ЗначениеДоступа", ТекущаяСтрока.ЗначениеДоступа);
+ НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(Отбор);
Если НайденныеЗначения.Количество() > 1 Тогда
Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор();
@@ -328,7 +363,10 @@
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
- ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта);
+
+ ТекущийОбъект.ДополнительныеСвойства.Вставить(
+ "ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта);
+
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
@@ -350,15 +388,18 @@
СтандартнаяОбработка = Ложь;
- ВыбранныйЭлемент = ВыбратьИзСписка(ТипыПользователей, Элемент, ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей));
+ ВыбранныйЭлемент = ВыбратьИзСписка(
+ ТипыПользователей,
+ Элемент,
+ ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей));
Если ВыбранныйЭлемент <> Неопределено
И Объект.ТипПользователей <> ВыбранныйЭлемент.Значение Тогда
- //
+
Модифицированность = Истина;
Объект.ТипПользователей = ВыбранныйЭлемент.Значение;
ПредставлениеТипаПользователей = ВыбранныйЭлемент.Представление;
- //
+
Если Объект.ТипПользователей <> Неопределено Тогда
УдалитьНеТипичныхПользователей();
КонецЕсли;
@@ -394,11 +435,16 @@
Процедура ПользователиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если Копирование Тогда
+
Если Элемент.ТекущиеДанные.ПолучитьРодителя() <> Неопределено Тогда
Отказ = Истина;
- Элементы.Пользователи.ТекущаяСтрока = Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор();
+
+ Элементы.Пользователи.ТекущаяСтрока =
+ Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор();
+
Элементы.Пользователи.СкопироватьСтроку();
КонецЕсли;
+
ИначеЕсли Элементы.Пользователи.ТекущаяСтрока <> Неопределено Тогда
Отказ = Истина;
Элементы.Пользователи.СкопироватьСтроку();
@@ -411,7 +457,10 @@
Если Элемент.ТекущиеДанные.ПолучитьРодителя() <> Неопределено Тогда
Отказ = Истина;
- Элементы.Пользователи.ТекущаяСтрока = Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор();
+
+ Элементы.Пользователи.ТекущаяСтрока =
+ Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор();
+
Элементы.Пользователи.ИзменитьСтроку();
КонецЕсли;
@@ -425,22 +474,27 @@
Если СтрокаРодителя <> Неопределено Тогда
Отказ = Истина;
- Если ТипЗнч(СтрокаРодителя.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
- //
- Предупреждение(НСтр("ru = 'Пользователи групп отображаются для сведения,
- |что они получают доступ групп пользователей.
- |Их нельзя удалить в этом списке.'"));
- //
- ИначеЕсли ТипЗнч(СтрокаРодителя.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
- //
- Предупреждение(НСтр("ru = 'Внешние пользователи групп отображаются для сведения,
- |что они получают доступ групп внешних пользователей.
- |Их нельзя удалить в этом списке.'"));
- //
- Иначе // тип родителя - пользователь или внешний пользователь
- Предупреждение(НСтр("ru = 'Руководители отображаются для сведения,
- |что они получают доступ подчиненных.
- |Их нельзя удалить в этом списке.'"));
+ Если ТипЗнч(СтрокаРодителя.Пользователь) =
+ Тип("СправочникСсылка.ГруппыПользователей") Тогда
+
+ Предупреждение(
+ НСтр("ru = 'Пользователи групп отображаются для сведения,
+ |что они получают доступ групп пользователей.
+ |Их нельзя удалить в этом списке.'"));
+
+ ИначеЕсли ТипЗнч(СтрокаРодителя.Пользователь) =
+ Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
+
+ Предупреждение(
+ НСтр("ru = 'Внешние пользователи групп отображаются для сведения,
+ |что они получают доступ групп внешних пользователей.
+ |Их нельзя удалить в этом списке.'"));
+
+ Иначе // Тип родителя - пользователь или внешний пользователь.
+ Предупреждение(
+ НСтр("ru = 'Руководители отображаются для сведения,
+ |что они получают доступ подчиненных.
+ |Их нельзя удалить в этом списке.'"));
КонецЕсли;
КонецЕсли;
@@ -455,7 +509,8 @@
Если Элемент.ТекущиеДанные.Пользователь = Неопределено Тогда
Элемент.ТекущиеДанные.НомерКартинки = -1;
- Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка");
+ Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение(
+ "Справочник.Пользователи.ПустаяСсылка");
КонецЕсли;
КонецПроцедуры
@@ -463,9 +518,10 @@
&НаКлиенте
Процедура ПользователиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
- Если НоваяСтрока И
- Элемент.ТекущиеДанные <> Неопределено И
- Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") Тогда
+ Если НоваяСтрока
+ И Элемент.ТекущиеДанные <> Неопределено
+ И Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение(
+ "Справочник.Пользователи.ПустаяСсылка") Тогда
Элемент.ТекущиеДанные.Пользователь = Неопределено;
КонецЕсли;
@@ -511,7 +567,7 @@
&НаКлиенте
Процедура ПользователиПослеУдаления(Элемент)
- // Установить отображение дерева
+ // Установка отображения дерева.
ЕстьРуководители = Ложь;
Для каждого Элемент Из ПользователиГруппы.ПолучитьЭлементы() Цикл
Если Элемент.ПолучитьЭлементы().Количество() > 0 Тогда
@@ -519,7 +575,9 @@
Прервать;
КонецЕсли;
КонецЦикла;
- Элементы.Пользователи.Отображение = ?(ЕстьРуководители, ОтображениеТаблицы.Дерево, ОтображениеТаблицы.Список);
+
+ Элементы.Пользователи.Отображение =
+ ?(ЕстьРуководители, ОтображениеТаблицы.Дерево, ОтображениеТаблицы.Список);
КонецПроцедуры
@@ -550,8 +608,9 @@
СтандартнаяОбработка = Ложь;
- Элементы.Пользователи.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка");
Элементы.Пользователи.ТекущиеДанные.НомерКартинки = -1;
+ Элементы.Пользователи.ТекущиеДанные.Пользователь = ПредопределенноеЗначение(
+ "Справочник.Пользователи.ПустаяСсылка");
КонецПроцедуры
@@ -560,7 +619,11 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
- ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст);
+ Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст, Ложь, Ложь);
+ Иначе
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст);
+ КонецЕсли;
КонецЕсли;
КонецПроцедуры
@@ -570,7 +633,11 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
- ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст);
+ Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст, Ложь, Ложь);
+ Иначе
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст);
+ КонецЕсли;
КонецЕсли;
КонецПроцедуры
@@ -642,7 +709,6 @@
Элементы.ВидыДоступа.ТекущиеДанные.ДоступРазрешен = (ВыбранноеЗначение = "ВсеРазрешены");
Модифицированность = Истина;
- //
ПриИзмененииТекущегоВидаДоступа(ЭтаФорма);
КонецПроцедуры
@@ -653,10 +719,15 @@
&НаКлиенте
Процедура ЗначенияДоступаПриИзменении(Элемент)
- Если Элемент.ТекущиеДанные <> Неопределено И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда
+ Если Элемент.ТекущиеДанные <> Неопределено
+ И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда
+
Элемент.ТекущиеДанные.ВидДоступа = ТекущийВидДоступа;
+
Отбор = Новый Структура("ВидДоступа", ТекущийВидДоступа);
- Элемент.ТекущиеДанные.НомерСтрокиПоВиду = Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество();
+
+ Элемент.ТекущиеДанные.НомерСтрокиПоВиду =
+ Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество();
КонецЕсли;
ОбновитьНомерСтрокиПоВиду(ЭтаФорма, Элементы.ВидыДоступа.ТекущиеДанные);
@@ -671,8 +742,9 @@
Элемент.ТекущиеДанные.ЗначениеДоступа = ТекущиеТипыЗначенийДоступа[0].Значение;
КонецЕсли;
- Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено
- И ТекущиеТипыЗначенийДоступа.Количество() > 1;
+ Элементы.ЗначениеДоступа.КнопкаОчистки
+ = ТекущийТипЗначенияДоступа <> Неопределено
+ И ТекущиеТипыЗначенийДоступа.Количество() > 1;
КонецПроцедуры
@@ -692,29 +764,38 @@
ТекущиеДанные.ЗначениеДоступа = ТекущийТипЗначенияДоступа;
КонецЕсли;
- Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено
- И ТекущиеТипыЗначенийДоступа.Количество() > 1;
+ Элементы.ЗначениеДоступа.КнопкаОчистки
+ = ТекущийТипЗначенияДоступа <> Неопределено
+ И ТекущиеТипыЗначенийДоступа.Количество() > 1;
- Если ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") ИЛИ
- ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка") Тогда
+ Если ТекущийТипЗначенияДоступа =
+ ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")
+
+ ИЛИ ТекущийТипЗначенияДоступа =
+ ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка") Тогда
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
- ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина);
+
ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент);
- ИначеЕсли ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка") ИЛИ
- ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка") Тогда
-
+ ИначеЕсли ТекущийТипЗначенияДоступа =
+ ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка")
+
+ ИЛИ ТекущийТипЗначенияДоступа =
+ ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка") Тогда
+
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
- ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина);
+
ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент);
КонецЕсли;
@@ -723,19 +804,31 @@
&НаКлиенте
Процедура ЗначениеДоступаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+ ТекущиеДанные = Элементы.ЗначенияДоступа.ТекущиеДанные;
+
Если ВыбранноеЗначение = Тип("СправочникСсылка.Пользователи") ИЛИ
ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыПользователей") Тогда
СтандартнаяОбработка = Ложь;
- НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа;
- ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", Новый Структура("ВыборГруппПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент);
-
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("РежимВыбора", Истина);
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина);
+
+ ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент);
+
ИначеЕсли ВыбранноеЗначение = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ
ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
СтандартнаяОбработка = Ложь;
- НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа;
- ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", Новый Структура("ВыборГруппВнешнихПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент);
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("РежимВыбора", Истина);
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина);
+
+ ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент);
КонецЕсли;
КонецПроцедуры
@@ -757,16 +850,23 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
- Если ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи")
- ИЛИ ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда
+ Если ТекущийВидДоступа =
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи")
+
+ ИЛИ ТекущийВидДоступа =
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда
- ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(
Текст,
,
- ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"),
- ТекущийВидДоступа <> ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи"));
+ ТекущийВидДоступа =
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"),
+
+ ТекущийВидДоступа <>
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи"));
Иначе
- ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь);
+ ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа(
+ Текст, ТекущийВидДоступа, Ложь);
КонецЕсли;
КонецЕсли;
@@ -778,16 +878,23 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
- Если ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи")
- ИЛИ ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда
+ Если ТекущийВидДоступа =
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи")
+
+ ИЛИ ТекущийВидДоступа =
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда
- ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(
Текст,
,
- ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"),
- ТекущийВидДоступа <> ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи"));
+ ТекущийВидДоступа =
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"),
+
+ ТекущийВидДоступа <>
+ ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи"));
Иначе
- ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь);
+ ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа(
+ Текст, ТекущийВидДоступа, Ложь);
КонецЕсли;
КонецЕсли;
@@ -811,32 +918,54 @@
Если ТекущийОбъект.Ссылка <> Справочники.ГруппыДоступа.Администраторы Тогда
- // Подготовка к режиму персональной группы доступа
+ // Подготовка к режиму персональной группы доступа.
Если ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда
+
АвтоЗаголовок = Ложь;
- Заголовок = ТекущийОбъект.Наименование + ": " + ТекущийОбъект.Пользователь + " " + НСтр("ru = '(Группа доступа)'");
- //
- ИспользованиеПерсональногоДоступа = ТекущийОбъект.Пользователи.Найти(ТекущийОбъект.Пользователь, "Пользователь") <> Неопределено;
+
+ Заголовок
+ = ТекущийОбъект.Наименование
+ + ": "
+ + ТекущийОбъект.Пользователь
+ + " "
+ + НСтр("ru = '(Группа доступа)'");
+
+ ИспользованиеПерсональногоДоступа = ТекущийОбъект.Пользователи.Найти(
+ ТекущийОбъект.Пользователь, "Пользователь") <> Неопределено;
Иначе
АвтоЗаголовок = Истина;
КонецЕсли;
- Элементы.Наименование.ТолькоПросмотр = ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
- Элементы.Родитель.ТолькоПросмотр = ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
- Элементы.Профиль.ТолькоПросмотр = ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
- Элементы.СвойстваПерсональнойГруппы.Видимость = ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
- Элементы.ПредставлениеТипаПользователей.Видимость = НЕ ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
- Элементы.ПользователиГруппы.Видимость = НЕ ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
- Элементы.АдминистраторПерсональнойГруппы.Видимость = ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
- Элементы.ПользователиИДоступ.ОтображениеСтраниц = ?(ЗначениеЗаполнено(ТекущийОбъект.Пользователь), ОтображениеСтраницФормы.Нет, ОтображениеСтраницФормы.ЗакладкиСверху);
- Элементы.ВидыДоступа.ПоложениеЗаголовка = ?(ЗначениеЗаполнено(ТекущийОбъект.Пользователь), ПоложениеЗаголовкаЭлементаФормы.Верх, ПоложениеЗаголовкаЭлементаФормы.Нет);
- Элементы.ПредставлениеТипаПользователей.Видимость = НЕ ЗначениеЗаполнено(ТекущийОбъект.Пользователь)
- И ( ВнешниеПользователи.ИспользоватьВнешнихПользователей()
- ИЛИ Объект.ТипПользователей <> Неопределено
- И ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи") );
- //
- Элементы.ПользовательВладелец.ТолькоПросмотр = УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа();
- // Подготовка к режиму редактирования пользователей администратором участников
+ ПользовательЗаполнен = ЗначениеЗаполнено(ТекущийОбъект.Пользователь);
+
+ Элементы.Наименование.ТолькоПросмотр = ПользовательЗаполнен;
+ Элементы.Родитель.ТолькоПросмотр = ПользовательЗаполнен;
+ Элементы.Профиль.ТолькоПросмотр = ПользовательЗаполнен;
+ Элементы.СвойстваПерсональнойГруппы.Видимость = ПользовательЗаполнен;
+ Элементы.ПредставлениеТипаПользователей.Видимость = НЕ ПользовательЗаполнен;
+ Элементы.ПользователиГруппы.Видимость = НЕ ПользовательЗаполнен;
+ Элементы.АдминистраторПерсональнойГруппы.Видимость = ПользовательЗаполнен;
+
+ Элементы.ПользователиИДоступ.ОтображениеСтраниц =
+ ?(ПользовательЗаполнен,
+ ОтображениеСтраницФормы.Нет,
+ ОтображениеСтраницФормы.ЗакладкиСверху);
+
+ Элементы.ВидыДоступа.ПоложениеЗаголовка =
+ ?(ПользовательЗаполнен,
+ ПоложениеЗаголовкаЭлементаФормы.Верх,
+ ПоложениеЗаголовкаЭлементаФормы.Нет);
+
+ Элементы.ПредставлениеТипаПользователей.Видимость
+ = НЕ ПользовательЗаполнен
+ И ( ВнешниеПользователи.ИспользоватьВнешнихПользователей()
+ ИЛИ Объект.ТипПользователей <> Неопределено
+ И ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи"));
+
+ Элементы.ПользовательВладелец.ТолькоПросмотр
+ = УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа();
+
+ // Подготовка к режиму редактирования пользователей администратором участников.
Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
Элементы.Наименование.ТолькоПросмотр = Истина;
Элементы.Родитель.ТолькоПросмотр = Истина;
@@ -864,7 +993,7 @@
ОбновитьСоставВидовДоступа(Истина);
- // Подготовка дерева пользователей
+ // Подготовка дерева пользователей.
ДеревоПользователей = ПользователиГруппы.ПолучитьЭлементы();
ДеревоПользователей.Очистить();
Для каждого СтрокаТЧ Из ТекущийОбъект.Пользователи Цикл
@@ -897,12 +1026,20 @@
&НаСервере
Процедура ЗаполнитьСписокТиповПользователей()
- ТипыПользователей.Добавить(Неопределено, НСтр("ru = 'Произвольные участники'"));
- ТипыПользователей.Добавить(Справочники.Пользователи.ПустаяСсылка(), НСтр("ru = 'Обычные пользователи'"));
+ ТипыПользователей.Добавить(
+ Неопределено,
+ НСтр("ru = 'Произвольные участники'"));
+
+ ТипыПользователей.Добавить(
+ Справочники.Пользователи.ПустаяСсылка(),
+ НСтр("ru = 'Обычные пользователи'"));
Если ИспользоватьВнешнихПользователей Тогда
- Для каждого ТипСсылкиОбъектаАвторизации ИЗ Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы() Цикл
+ ТипыСсылокОбъектовАвторизации =
+ Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы();
+
+ Для каждого ТипСсылкиОбъектаАвторизации ИЗ ТипыСсылокОбъектовАвторизации Цикл
МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации);
@@ -919,11 +1056,12 @@
КонецЕсли;
НайденныйЭлемент = ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей);
+
ПредставлениеТипаПользователей =
?(НайденныйЭлемент = Неопределено,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Неизвестный тип ""%1""'"),
- Строка(ТипЗнч(Объект.ТипПользователей))),
+ НСтр("ru = 'Неизвестный тип ""%1""'"),
+ Строка(ТипЗнч(Объект.ТипПользователей))),
НайденныйЭлемент.Представление);
КонецПроцедуры
@@ -941,19 +1079,26 @@
Индекс = Объект.Пользователи.Количество()-1;
Пока Индекс >= 0 Цикл
- Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.Пользователи") И
- ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.ГруппыПользователей") Тогда
+ Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь)
+ <> Тип("СправочникСсылка.Пользователи")
+
+ И ТипЗнч(Объект.Пользователи[Индекс].Пользователь)
+ <> Тип("СправочникСсылка.ГруппыПользователей") Тогда
Объект.Пользователи.Удалить(Индекс);
КонецЕсли;
+
Индекс = Индекс - 1;
КонецЦикла;
Иначе
Индекс = Объект.Пользователи.Количество()-1;
Пока Индекс >= 0 Цикл
- Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") И
- ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
+ Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь)
+ <> Тип("СправочникСсылка.ВнешниеПользователи")
+
+ И ТипЗнч(Объект.Пользователи[Индекс].Пользователь)
+ <> Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
Объект.Пользователи.Удалить(Индекс);
КонецЕсли;
@@ -980,12 +1125,17 @@
| И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации) <> &ТипВнешнихПользователей
| И ГруппыВнешнихПользователей.Ссылка В(&ВыбранныеВнешниеПользователиИГруппы)");
- Запрос.УстановитьПараметр("ВыбранныеВнешниеПользователиИГруппы", Объект.Пользователи.Выгрузить().ВыгрузитьКолонку("Пользователь"));
+ Запрос.УстановитьПараметр(
+ "ВыбранныеВнешниеПользователиИГруппы",
+ Объект.Пользователи.Выгрузить().ВыгрузитьКолонку("Пользователь"));
+
Запрос.УстановитьПараметр("ТипВнешнихПользователей", ТипЗнч(Объект.ТипПользователей));
Выборка = Запрос.Выполнить().Выбрать();
+
Пока Выборка.Следующий() Цикл
- НайденныеСтроки = Объект.Пользователи.НайтиСтроки(Новый Структура("Пользователь", Выборка.Ссылка));
+ Отбор = Новый Структура("Пользователь", Выборка.Ссылка);
+ НайденныеСтроки = Объект.Пользователи.НайтиСтроки(Отбор);
Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Объект.Пользователи.Удалить(Объект.Пользователи.Индекс(НайденнаяСтрока));
КонецЦикла;
@@ -998,7 +1148,8 @@
&НаСервере
Процедура ОбновитьСоставВидовДоступа(Знач ПриЧтенииНаСервере = Ложь)
- Запрос = Новый Запрос(
+ Запрос = Новый Запрос;
+ Запрос.Текст =
"ВЫБРАТЬ
| ПрофилиГруппДоступаВидыДоступа.ВидДоступа,
| ПрофилиГруппДоступаВидыДоступа.Предустановленный,
@@ -1007,8 +1158,10 @@
| Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПрофилиГруппДоступаВидыДоступа
|ГДЕ
| ПрофилиГруппДоступаВидыДоступа.Ссылка = &Ссылка
- | И ПрофилиГруппДоступаВидыДоступа.ВидДоступа.Предопределенный");
+ | И ПрофилиГруппДоступаВидыДоступа.ВидДоступа.Предопределенный";
+
Запрос.УстановитьПараметр("Ссылка", Объект.Профиль);
+
УстановитьПривилегированныйРежим(Истина);
ВидыДоступаПрофиля = Запрос.Выполнить().Выгрузить();
УстановитьПривилегированныйРежим(Ложь);
@@ -1019,12 +1172,12 @@
Для каждого СтрокаТЧ Из ВидыДоступаПрофиля Цикл
Отбор = Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа);
- СвойстваВидаДоступа = УправлениеДоступом.СвойстваВидаДоступа(СтрокаТЧ.ВидДоступа);
+ СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(СтрокаТЧ.ВидДоступа);
Если СвойстваВидаДоступа <> Неопределено
И НЕ СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда
И НЕ СтрокаТЧ.Предустановленный
- И Объект.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа)).Количество() = 0 Тогда
+ И Объект.ВидыДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда
ИзменилсяСоставВидовДоступа = Истина;
Если ПриЧтенииНаСервере Тогда
@@ -1041,21 +1194,25 @@
Индекс = Объект.ВидыДоступа.Количество() - 1;
Пока Индекс >= 0 Цикл
+
ТекущийВидДоступа1 = Объект.ВидыДоступа[Индекс].ВидДоступа;
- СвойстваВидаДоступаВПрофиле = ВидыДоступаПрофиля.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа1));
- СвойстваВидаДоступа = УправлениеДоступом.СвойстваВидаДоступа(ТекущийВидДоступа1);
+ Отбор = Новый Структура("ВидДоступа", ТекущийВидДоступа1);
+
+ СвойстваВидаДоступаВПрофиле = ВидыДоступаПрофиля.НайтиСтроки(Отбор);
+ СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(ТекущийВидДоступа1);
+
Если СвойстваВидаДоступа = Неопределено
ИЛИ СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда
ИЛИ СвойстваВидаДоступаВПрофиле.Количество() > 0
И СвойстваВидаДоступаВПрофиле[0].Предустановленный
- ИЛИ ВидыДоступаПрофиля.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа1)).Количество() = 0 Тогда
+ ИЛИ ВидыДоступаПрофиля.НайтиСтроки(Отбор).Количество() = 0 Тогда
ИзменилсяСоставВидовДоступа = Истина;
Если ПриЧтенииНаСервере Тогда
Прервать;
Иначе
Объект.ВидыДоступа.Удалить(Индекс);
- Для каждого ЭлементКоллекции Из Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа1)) Цикл
+ Для каждого ЭлементКоллекции Из Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл
Объект.ЗначенияДоступа.Удалить(ЭлементКоллекции);
КонецЦикла;
КонецЕсли;
@@ -1063,13 +1220,15 @@
Индекс = Индекс - 1;
КонецЦикла;
- Модифицированность = Модифицированность ИЛИ ИзменилсяСоставВидовДоступа И НЕ ПриЧтенииНаСервере;
+ Модифицированность = Модифицированность
+ ИЛИ ИзменилсяСоставВидовДоступа
+ И НЕ ПриЧтенииНаСервере;
// Установка флажка для запроса у пользователя решения обновить состав видов доступа.
Если ПриЧтенииНаСервере
- И НЕ Объект.Ссылка.Пустая() // ЭтоНовый
+ И НЕ Объект.Ссылка.Пустая() // Это новый.
И ИзменилсяСоставВидовДоступа
- И Пользователи.ЭтоПолноправныйПользователь() // Только администратор может обновлять виды доступа
+ И Пользователи.ЭтоПолноправныйПользователь() // Только администратор может обновлять виды доступа.
И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Профиль") = Объект.Профиль Тогда
ИзменилсяСоставВидовДоступаПриЧтении = Истина;
@@ -1087,7 +1246,8 @@
Индекс = Индекс - 1;
КонецЦикла;
Для каждого СтрокаТЧ Из ВидыДоступаПрофиля Цикл
- Индекс = Объект.ВидыДоступа.Индекс(Объект.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа))[0]);
+ Отбор = Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа);
+ Индекс = Объект.ВидыДоступа.Индекс(Объект.ВидыДоступа.НайтиСтроки(Отбор)[0]);
Объект.ВидыДоступа.Сдвинуть(Индекс, ВидыДоступаПрофиля.Индекс(СтрокаТЧ) - Индекс);
КонецЦикла;
КонецЕсли;
@@ -1099,99 +1259,155 @@
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ПриИзмененииТекущегоВидаДоступа(Знач Контекст)
+Процедура ПриИзмененииТекущегоВидаДоступа(Знач Форма)
+
+ Элементы = Форма.Элементы;
ЗначенияЗадаются = Ложь;
#Если Клиент Тогда
- ТекущиеДанные = Контекст.Элементы.ВидыДоступа.ТекущиеДанные;
+ ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные;
#Иначе
- ТекущиеДанные = Контекст.Объект.ВидыДоступа.НайтиПоИдентификатору(?(Контекст.Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Контекст.Элементы.ВидыДоступа.ТекущаяСтрока));
+ ТекущиеДанные = Форма.Объект.ВидыДоступа.НайтиПоИдентификатору(
+ ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено,
+ -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)'") );
+ КонецЕсли;
+
+ Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ ШаблонНадписи,
Строка(ТекущиеДанные.ВидДоступа));
- ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ТекущиеДанные);
+ ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ТекущиеДанные);
Иначе
- Контекст.ТекущийВидДоступа = Неопределено;
- Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено);
+ Форма.ТекущийВидДоступа = Неопределено;
- Если Контекст.Объект.ВидыДоступа.Количество() = 0 Тогда
- Контекст.Объект.ЗначенияДоступа.Очистить();
+ Элементы.ЗначенияДоступа.ОтборСтрок =
+ Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено);
+
+ Если Форма.Объект.ВидыДоступа.Количество() = 0 Тогда
+ Форма.Объект.ЗначенияДоступа.Очистить();
КонецЕсли;
КонецЕсли;
- Контекст.ТекущийТипЗначенияДоступа = ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.ТекущийТипЗначенияДоступа);
- Контекст.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений;
- //
+ Форма.ТекущийТипЗначенияДоступа =
+ ?(ТекущиеДанные = Неопределено,
+ Неопределено,
+ ТекущиеДанные.ТекущийТипЗначенияДоступа);
+
+ Форма.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений;
+
Если ЗначенияЗадаются Тогда
- Для каждого ОписаниеТипаВидаДоступа Из Контекст.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа)) Цикл
- Контекст.ТекущиеТипыЗначенийДоступа.Добавить(ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, ОписаниеТипаВидаДоступа.ПредставлениеТипа);
+ Отбор = Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа);
+ ОписаниеТиповВидовДоступа = Форма.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Отбор);
+
+ Для каждого ОписаниеТипаВидаДоступа Из ОписаниеТиповВидовДоступа Цикл
+
+ Форма.ТекущиеТипыЗначенийДоступа.Добавить(
+ ОписаниеТипаВидаДоступа.ТипЗначенияДоступа,
+ ОписаниеТипаВидаДоступа.ПредставлениеТипа);
КонецЦикла;
Иначе
Если ТекущиеДанные <> Неопределено Тогда
- Отбор = Новый Структура("ВидДоступа", Контекст.Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа);
- Для каждого Строка Из Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл
- Контекст.Объект.ЗначенияДоступа.Удалить(Строка);
+ Отбор = Новый Структура("ВидДоступа", Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа);
+
+ Для каждого Строка Из Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл
+ Форма.Объект.ЗначенияДоступа.Удалить(Строка);
КонецЦикла
КонецЕсли;
КонецЕсли;
//
- Если Контекст.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда
- Контекст.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'"));
+ Если Форма.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда
+ Форма.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'"));
КонецЕсли;
- Контекст.Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются;
- Контекст.Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются;
+ Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются;
+
+ Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы
+ .ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ОписаниеВидаДоступа)
+Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ОписаниеВидаДоступа)
+
+ Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа);
+ КоличествоЗначений = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество();
- КоличествоЗначений = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа)).Количество();
Если КоличествоЗначений > 0 Тогда
- ПрописьЧисла = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = ',,,,,,,,0'"));
- ПрописьЧислаИПредмета = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'"));
- ЧислоИПредмет = СтрЗаменить(ПрописьЧислаИПредмета, ПрописьЧисла, Формат(КоличествоЗначений, "ЧГ="));
+
+ ПрописьЧисла = ЧислоПрописью(
+ КоличествоЗначений,
+ "Л = ru_RU",
+ НСтр("ru = ',,,,,,,,0'"));
+
+ ПрописьЧислаИПредмета = ЧислоПрописью(
+ КоличествоЗначений,
+ "Л = ru_RU",
+ НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'"));
+
+ ЧислоИПредмет = СтрЗаменить(
+ ПрописьЧислаИПредмета,
+ ПрописьЧисла,
+ Формат(КоличествоЗначений, "ЧГ="));
+
ОписаниеВидаДоступа.Использование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
?(ОписаниеВидаДоступа.ДоступРазрешен,
НСтр("ru = 'Все разрешены, кроме %1'"),
НСтр("ru = 'Все запрещены, кроме %1'") ),
ЧислоИПредмет);
- ИначеЕсли Контекст.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда
+
+ ИначеЕсли Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(
+ ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда
+
ОписаниеВидаДоступа.Использование =
?(ОписаниеВидаДоступа.ДоступРазрешен,
НСтр("ru = 'Все разрешены, без исключений'"),
@@ -1206,10 +1422,10 @@
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ОбновитьНомерСтрокиПоВиду(Контекст, ОписаниеВидаДоступа)
+Процедура ОбновитьНомерСтрокиПоВиду(Форма, ОписаниеВидаДоступа)
Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа);
- ЗначенияДоступаПоВиду = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор);
+ ЗначенияДоступаПоВиду = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор);
ТекущийНомер = 1;
Для каждого Строка Из ЗначенияДоступаПоВиду Цикл
@@ -1220,17 +1436,6 @@
КонецПроцедуры
-&НаСервере
-Функция СформироватьДанныеВыбораПользователя(Текст)
-
- Если Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
- Возврат Пользователи.СформироватьДанныеВыбораПользователя(Текст, Ложь, Ложь);
- КонецЕсли;
-
- Возврат Пользователи.СформироватьДанныеВыбораПользователя(Текст);
-
-КонецФункции
-
&НаКлиенте
Функция ВыбранТипПользователиИлиВнешниеПользователи(ВыборИПодборВнешнихПользователей)
@@ -1248,9 +1453,13 @@
КонецЕсли;
Если ИспользоватьВнешнихПользователей Тогда
- Элемент = СписокТиповПользователей.ВыбратьЭлемент(НСтр("ru = 'Выбор типа данных'"), СписокТиповПользователей[0]);
+
+ Элемент = СписокТиповПользователей.ВыбратьЭлемент(
+ НСтр("ru = 'Выбор типа данных'"), СписокТиповПользователей[0]);
+
Если Элемент <> Неопределено Тогда
- ВыборИПодборВнешнихПользователей = Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи");
+ ВыборИПодборВнешнихПользователей =
+ Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи");
Иначе
Возврат Ложь;
КонецЕсли;
@@ -1276,22 +1485,34 @@
Если ТипыЗначенияДоступа.Количество() = 2 Тогда
- Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")) <> Неопределено
- И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка")) <> Неопределено Тогда
+ Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение(
+ "Справочник.Пользователи.ПустаяСсылка")) <> Неопределено
+
+ И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение(
+ "Справочник.ГруппыПользователей.ПустаяСсылка")) <> Неопределено Тогда
+
+ ТекущийТипЗначенияДоступа = ПредопределенноеЗначение(
+ "Справочник.Пользователи.ПустаяСсылка");
- ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка");
Возврат Истина;
КонецЕсли;
- Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка")) <> Неопределено
- И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка")) <> Неопределено Тогда
+ Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение(
+ "Справочник.ВнешниеПользователи.ПустаяСсылка")) <> Неопределено
+
+ И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение(
+ "Справочник.ГруппыВнешнихПользователей.ПустаяСсылка")) <> Неопределено Тогда
+
+ ТекущийТипЗначенияДоступа = ПредопределенноеЗначение(
+ "Справочник.ВнешниеПользователи.ПустаяСсылка");
- ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка");
Возврат Истина;
КонецЕсли;
КонецЕсли;
- Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент(НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]);
+ Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент(
+ НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]);
+
Если Элемент <> Неопределено Тогда
ТекущийТипЗначенияДоступа = Элемент.Значение;
Возврат Истина;
@@ -1308,20 +1529,23 @@
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
- ПараметрыФормы.Вставить("ТекущаяСтрока", ?(Элементы.Пользователи.ТекущиеДанные = Неопределено, Неопределено, Элементы.Пользователи.ТекущиеДанные.Пользователь));
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ?(
+ Элементы.Пользователи.ТекущиеДанные = Неопределено,
+ Неопределено,
+ Элементы.Пользователи.ТекущиеДанные.Пользователь));
- Если НЕ Подобрать И
- ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) И
- ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.Пользователи") ИЛИ
- ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") ) Тогда
+ Если НЕ Подобрать
+ И ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока)
+ И ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.Пользователи")
+ ИЛИ ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") ) Тогда
ВыборИПодборВнешнихПользователей = Ложь;
- ИначеЕсли НЕ Подобрать И
- ИспользоватьВнешнихПользователей И
- ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) И
- ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ
- ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") ) Тогда
+ ИначеЕсли НЕ Подобрать
+ И ИспользоватьВнешнихПользователей
+ И ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока)
+ И ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ВнешниеПользователи")
+ ИЛИ ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") ) Тогда
ВыборИПодборВнешнихПользователей = Истина;
Иначе
@@ -1348,19 +1572,22 @@
ПараметрыФормы.Вставить("ТипОбъектовАвторизации", Объект.ТипПользователей);
КонецЕсли;
Если СправочникВнешниеПользователиДоступен Тогда
- ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи);
+
+ ОткрытьФорму(
+ "Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи);
Иначе
Предупреждение(НСтр("ru = 'Недостаточно прав для выбора внешних пользователей.'"));
КонецЕсли;
Иначе
- ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи);
+ ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи);
КонецЕсли;
КонецПроцедуры
&НаСервере
-Процедура ОбновитьПользователейГруппИРуководителейПользователей(ИдентификаторСтроки = Неопределено, ИзмененныеСтроки = Неопределено)
+Процедура ОбновитьПользователейГруппИРуководителейПользователей(ИдентификаторСтроки = Неопределено,
+ ИзмененныеСтроки = Неопределено)
УстановитьПривилегированныйРежим(Истина);
@@ -1448,16 +1675,20 @@
Если ТипЗнч(Элемент.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей")
ИЛИ ТипЗнч(Элемент.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
- // Заполнение пользователей группы
+ // Заполнение пользователей группы.
СтарыеПользователи = Элемент.ПолучитьЭлементы();
- НовыеПользователи = РезультатыЗапросов[1].Выгрузить().НайтиСтроки(Новый Структура("ГруппаПользователей", Элемент.Пользователь));
+ Отбор = Новый Структура("ГруппаПользователей", Элемент.Пользователь);
+ НовыеПользователи = РезультатыЗапросов[1].Выгрузить().НайтиСтроки(Отбор);
+
Если СтарыеПользователи.Количество() <> НовыеПользователи.Количество() Тогда
СтарыеПользователи.Очистить();
Для каждого Строка Из НовыеПользователи Цикл
НовыйЭлемент = СтарыеПользователи.Добавить();
НовыйЭлемент.Ссылка = Строка.Пользователь;
НовыйЭлемент.Пользователь = Строка.Пользователь;
- ОбновитьРуководителейПользователя(НовыйЭлемент, РуководителиПодчиненных, ИзмененныеСтроки);
+
+ ОбновитьРуководителейПользователя(
+ НовыйЭлемент, РуководителиПодчиненных, ИзмененныеСтроки);
КонецЦикла;
ИзмененныеСтроки.Добавить(Элемент.ПолучитьИдентификатор());
Иначе
@@ -1470,9 +1701,10 @@
КонецЕсли;
КонецЦикла;
- Пользователи.ЗаполнитьНомераКартинокПользователей(ПользователиГруппы, "Ссылка", "НомерКартинки", ИдентификаторСтроки, Истина);
+ Пользователи.ЗаполнитьНомераКартинокПользователей(
+ ПользователиГруппы, "Ссылка", "НомерКартинки", ИдентификаторСтроки, Истина);
- // Установить отображение дерева
+ // Установка отображения дерева.
ЕстьДерево = Ложь;
Для каждого Элемент Из ПользователиГруппы.ПолучитьЭлементы() Цикл
Если Элемент.ПолучитьЭлементы().Количество() > 0 Тогда
@@ -1487,14 +1719,19 @@
Процедура ОбновитьРуководителейПользователя(Знач ОписаниеПользователя, Знач РуководителиПодчиненных, Знач ИзмененныеСтроки)
СтарыеРуководители = ОписаниеПользователя.ПолучитьЭлементы();
- НовыеРуководители = РуководителиПодчиненных.НайтиСтроки(Новый Структура("Подчиненный", ОписаниеПользователя.Ссылка));
+
+ Отбор = Новый Структура("Подчиненный", ОписаниеПользователя.Ссылка);
+ НовыеРуководители = РуководителиПодчиненных.НайтиСтроки(Отбор);
Если СтарыеРуководители.Количество() <> НовыеРуководители.Количество() Тогда
СтарыеРуководители.Очистить();
+
Для каждого Строка Из НовыеРуководители Цикл
ОписаниеРуководителя = СтарыеРуководители.Добавить();;
ОписаниеРуководителя.Ссылка = Строка.Руководитель;
- ОписаниеРуководителя.Пользователь = Строка.ПредставлениеРуководителя + " (" + НСтр("ru = 'руководитель'") + ")";
+
+ ОписаниеРуководителя.Пользователь =
+ Строка.ПредставлениеРуководителя + " (" + НСтр("ru = 'руководитель'") + ")";
КонецЦикла;
ИзмененныеСтроки.Добавить(ОписаниеПользователя.ПолучитьИдентификатор());
КонецЕсли;
@@ -1546,14 +1783,38 @@
Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
РезультатыЗапросов = Запрос.ВыполнитьПакет();
- // Восстановление реквизитов
+ // Восстановление реквизитов.
ЗаполнитьЗначенияСвойств(ТекущийОбъект, РезультатыЗапросов[0].Выгрузить()[0]);
- // Восстановление табличной части ВидыДоступа
+
+ // Восстановление табличной части ВидыДоступа.
ТекущийОбъект.ВидыДоступа.Загрузить(РезультатыЗапросов[1].Выгрузить());
- // Восстановление табличной части ЗначенияДоступа
+
+ // Восстановление табличной части ЗначенияДоступа.
ТекущийОбъект.ЗначенияДоступа.Загрузить(РезультатыЗапросов[2].Выгрузить());
КонецПроцедуры
+&НаСервереБезКонтекста
+Функция СформироватьДанныеВыбораПользователя(Знач Текст,
+ Знач ВключаяГруппы = Истина,
+ Знач ВключаяВнешнихПользователей = Неопределено,
+ Знач БезПользователей = Ложь) Экспорт
+
+ Возврат Пользователи.СформироватьДанныеВыбораПользователя(
+ Текст,
+ ВключаяГруппы,
+ ВключаяВнешнихПользователей,
+ БезПользователей);
+
+
+КонецФункции
-
+&НаСервереБезКонтекста
+Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина)
+
+ Возврат УправлениеДоступомСлужебный.СформироватьДанныеВыбораЗначенияДоступа(
+ Текст,
+ ВидДоступа,
+ ВключаяГруппы);
+
+КонецФункции
diff --git a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html
index 20f5e2108..7e7955e5b 100644
--- a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html
+++ b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Группы доступа предназначены для настройки прав и ограничений прав доступа конкретным пользователям и группам пользователей системы.
Набор прав и возможности по их ограничению определяются заданным профилем групп доступа. Например, группа доступа "Менеджеры по продажам ПО делового назначения" с пользователями Иванов и Петров может ссылаться на профиль "Менеджер по продажам", в котором предусмотрена возможность ограничения по виду доступа "Виды номенклатуры". Тогда если по этому виду доступа для всех значений указать вариант "Запрещены", а в список добавить вид номенклатуры "ПО делового назначения", то Иванову и Петрову будут доступны только те данные и операции, которые связаны с ПО делового назначения.
Рекомендуется задавать наименования групп таким образом, чтобы название отражало как суть профиля, так и смысл ограничений, заданных в группе.
diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl
index 3f1e29c6f..79922de34 100644
--- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -11,14 +13,16 @@
Если Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда
// Всегда предопределенный профиль Администратор
Профиль = Справочники.ПрофилиГруппДоступа.Администратор;
- // Не может быть персональной группой доступа
+ // Не может быть персональной группой доступа.
Пользователь = Неопределено;
+ // Не может иметь обычного ответственного (только полноправные пользователи).
+ Администратор = Неопределено;
// Только обычные пользователи
ТипПользователей = Справочники.Пользователи.ПустаяСсылка();
// Изменение разрешено только полноправному пользователю
Если НЕ ПривилегированныйРежим()
И НЕ УправлениеДоступом.ЕстьРоль("ПолныеПрава") Тогда
- //
+
ВызватьИсключение(НСтр("ru = 'Предопределенную группу доступа Администраторы
|можно изменять, либо в привилегированном режиме,
|либо при наличии роли ""Полные права"".'"));
@@ -32,24 +36,24 @@
Если НЕ ЭтоГруппа Тогда
Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") Тогда
- //
+
Если ЗначениеЗаполнено(Ссылка) Тогда
СтараяТаблицаПользователи = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Пользователи");
СтарыеУчастникиГруппыДоступа = СтараяТаблицаПользователи.Выгрузить().ВыгрузитьКолонку("Пользователь");
Иначе
СтарыеУчастникиГруппыДоступа = Новый Массив;
КонецЕсли;
- //
+
ДополнительныеСвойства.Вставить("СтарыеУчастникиГруппыДоступа", СтарыеУчастникиГруппыДоступа);
КонецЕсли;
// Автоматическая установка реквизитов для персональной группы доступа
Если ЗначениеЗаполнено(Пользователь) Тогда
- Родитель = УправлениеДоступом.РодительПерсональныхГруппДоступа();
+ Родитель = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа();
ТипПользователей = Неопределено;
Иначе
Пользователь = Неопределено;
- Если Родитель = УправлениеДоступом.РодительПерсональныхГруппДоступа(Истина) Тогда
+ Если Родитель = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(Истина) Тогда
Родитель = Неопределено;
КонецЕсли;
КонецЕсли;
@@ -81,15 +85,16 @@
Если НЕ ЭтоГруппа Тогда
Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") Тогда
- УправлениеДоступом.ОбновитьРолиПользователейПриИзмененииГруппыДоступа(Ссылка, ДополнительныеСвойства.СтарыеУчастникиГруппыДоступа);
+
+ ОбновитьРолиПользователейПриИзмененииГруппыДоступа(
+ Ссылка, ДополнительныеСвойства.СтарыеУчастникиГруппыДоступа);
КонецЕсли;
- УправлениеДоступом.ОбновитьТаблицыГруппДоступа(Ссылка);
+ УправлениеДоступомСлужебный.ОбновитьТаблицыГруппДоступа(Ссылка);
- УправлениеДоступом.ЗаписатьЗначенияГруппДоступа(Ссылка);
-
- УправлениеДоступом.ОбновитьПодчиненныхПользователейГруппДоступа();
+ УправлениеДоступомСлужебный.ЗаписатьЗначенияГруппДоступа(Ссылка);
+ УправлениеДоступомСлужебный.ОбновитьПодчиненныхПользователейГруппДоступа();
КонецЕсли;
КонецПроцедуры
@@ -102,3 +107,66 @@
КонецЕсли;
КонецПроцедуры
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Вспомогательные процедуры и функции
+
+Процедура ОбновитьРолиПользователейПриИзмененииГруппыДоступа(ГруппаДоступа,
+ СтарыеУчастникиГруппыДоступа) Экспорт
+
+ УстановитьПривилегированныйРежим(Истина);
+
+ // Обновление ролей для добавленных, оставшихся и удаленных пользователей.
+ Запрос = Новый Запрос;
+ Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа);
+ Запрос.УстановитьПараметр("СтарыеУчастникиГруппыДоступа", СтарыеУчастникиГруппыДоступа);
+ Запрос.Текст =
+ "ВЫБРАТЬ РАЗЛИЧНЫЕ
+ | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь
+ |ИЗ
+ | РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей
+ |ГДЕ
+ | ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)
+ | И ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ
+ | И ПользователиИГруппыПользователей.ГруппаДоступа В(&СтарыеУчастникиГруппыДоступа)
+ | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи)
+ | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))
+ |
+ |ОБЪЕДИНИТЬ
+ |
+ |ВЫБРАТЬ
+ | ПользователиИГруппыПользователей.ЗначениеДоступа
+ |ИЗ
+ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
+ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей
+ | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка))
+ | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ)
+ | И ГруппыДоступаПользователи.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа
+ | И (ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа)
+ | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи)
+ | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))";
+ СтарыеИНовыеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь");
+
+ Если ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда
+ // Добавление пользователей, связанных с пользователямиИБ, имеющих роль ПолныеПрава
+ Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
+ Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда
+ НайденныйПользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор);
+ Если НЕ ЗначениеЗаполнено(НайденныйПользователь) Тогда
+ НайденныйПользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор);
+ КонецЕсли;
+ Если ЗначениеЗаполнено(НайденныйПользователь)
+ И СтарыеИНовыеПользователи.Найти(НайденныйПользователь) = Неопределено Тогда
+ СтарыеИНовыеПользователи.Добавить(НайденныйПользователь);
+ КонецЕсли;
+ КонецЕсли;
+ КонецЦикла;
+ КонецЕсли;
+
+ УправлениеДоступом.ОбновитьРолиПользователей(СтарыеИНовыеПользователи);
+
+КонецПроцедуры
+
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl
index 376da37d3..fca2d452a 100644
--- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
Процедура ПередЗаписью(Отказ)
@@ -48,3 +50,5 @@
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl
index 5ab08c97a..2a937314b 100644
--- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl
@@ -7,12 +7,12 @@
Если Параметры.РежимВыбора Тогда
Элементы.Список.РежимВыбора = Истина;
- // Отбор не помеченных на удаление
+ // Отбор не помеченных на удаление.
Список.Отбор.Элементы[0].Использование = Истина;
Список.Отбор.Элементы[1].Использование = Параметры.Свойство("ВыборРодителя");
Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда
- // Режим подбора
+ // Режим подбора.
Заголовок = НСтр("ru = 'Подбор групп пользователей'");
Элементы.Список.МножественныйВыбор = Истина;
Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный;
diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html
index 3338169dc..d10f881e1 100644
--- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html
+++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Карточка группы пользователей позволяет просматривать и редактировать свойства группы.
При редактировании состава пользователей группы нужно учитывать, что они неявно входят в состав групп-родителей. Для добавления большого числа пользователей можно использовать команду Подобрать.
См. также
diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl
index 59e6aa8a0..76085d1d1 100644
--- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl
@@ -4,19 +4,18 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- Если Объект.Ссылка = Справочники.ГруппыПользователей.ПустаяСсылка() И
- Объект.Родитель.Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда
+ Если Объект.Ссылка = Справочники.ГруппыПользователей.ПустаяСсылка()
+ И Объект.Родитель = Справочники.ГруппыПользователей.ВсеПользователи Тогда
Объект.Родитель = Справочники.ГруппыПользователей.ПустаяСсылка();
-
КонецЕсли;
Если Объект.Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда
- Элементы.Наименование.Доступность = Ложь;
- Элементы.Родитель.Доступность = Ложь;
+ Элементы.Наименование.ТолькоПросмотр = Истина;
+ Элементы.Родитель.ТолькоПросмотр = Истина;
Элементы.СоставПодобрать.Доступность = Ложь;
- Элементы.Состав.Доступность = Ложь;
- Элементы.Комментарий.Доступность = Ложь;
+ Элементы.Состав.ТолькоПросмотр = Истина;
+ Элементы.Комментарий.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
@@ -50,6 +49,7 @@
Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
+
Для каждого Значение Из ВыбранноеЗначение Цикл
ОбработкаВыбораПользователя(Значение);
КонецЦикла;
@@ -80,7 +80,10 @@
Процедура ОбработкаВыбораПользователя(ВыбранноеЗначение)
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.Пользователи") Тогда
- Если Объект.Состав.НайтиСтроки(Новый Структура("Пользователь", ВыбранноеЗначение)).Количество() = 0 Тогда
+
+ Отбор = Новый Структура("Пользователь", ВыбранноеЗначение);
+ Если Объект.Состав.НайтиСтроки(Отбор).Количество() = 0 Тогда
+
Объект.Состав.Добавить().Пользователь = ВыбранноеЗначение;
КонецЕсли;
КонецЕсли;
diff --git a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html
index 92c9fc402..d2592fc74 100644
--- a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html
+++ b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В этом списке ведется учет групп пользователей.
Группы пользователей могут использоваться для группировки большого числа пользователей, а также когда нужно указывать не только пользователя, но и группу пользователей, например, при настройке доступа, в ролях исполнителей задач бизнес-процессов и др.
Группы создаются плоским списком или иерархическим. В иерархическом списке, пользователи вложенных групп неявно входят в группы-родители.
Для дополнительных обработок или отчетов, предназначенных для работы с конкретными объектами, можно определить состав объектов, в которых будут доступны команды обработки или отчета (команда Назначение обработки).
Команды обработок или отчетов могут быть доступны из списка выбранных объектов, если установлен флаг Использовать для форм списка и из формы самого объекта, если установлен флаг Использовать для форм объекта.
Для обработок и отчетов, которые вызываются из командного интерфейса (не прикрепляются к объектам конфигурации):
diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl
index c71113e1d..33e810064 100644
--- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl
@@ -4,6 +4,21 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+ ПравоДобавления = ДополнительныеОтчетыИОбработки.ПравоДобавления();
+
+ Если ЭтоНовый И НЕ ПравоДобавления Тогда
+ Отказ = Истина;
+ Возврат;
+ КонецЕсли;
+
+ Если НЕ ПравоДобавления Тогда
+ Элементы.ЗагрузитьФайлОбработкиОтчета.Видимость = Ложь;
+ КонецЕсли;
+
+ ВидДополнительнаяОбработка = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка;
+ ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет;
+ ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет;
+
РегистрацияОбработки = Ложь;
Если Объект.Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
@@ -20,9 +35,6 @@
УстановитьЭлементыФормы();
- ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет;
- ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет;
-
КонецПроцедуры
&НаКлиенте
@@ -77,8 +89,7 @@
РегистрацияОбработки = Ложь;
КонецЕсли;
- Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка
- ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
+ Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("КомандыОбработки", РеквизитФормыВЗначение("КомандыОбработки"));
@@ -89,6 +100,7 @@
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ЭтоНовый = Ложь;
+ УстановитьЭлементыФормы();
КонецПроцедуры
&НаСервере
@@ -105,34 +117,92 @@
КонецПроцедуры
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ
+
+&НаКлиенте
+Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
+ СтандартнаяОбработка = Ложь;
+ ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(
+ Объект.Комментарий,
+ Объект.Комментарий,
+ Модифицированность
+ );
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВариантыДополнительногоОтчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+ Отказ = Истина;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВариантыДополнительногоОтчетаПередНачаломИзменения(Элемент, Отказ)
+ Отказ = Истина;
+ ОткрытьВариант();
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВариантыДополнительногоОтчетаПередУдалением(Элемент, Отказ)
+ Вариант = Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные;
+ Если Вариант = Неопределено Тогда
+ Отказ = Истина;
+ Возврат;
+ КонецЕсли;
+
+ Если НЕ Вариант.Пользовательский Тогда
+ Предупреждение(НСтр("ru = 'Пометка на удаление предопределенного варианта отчета запрещена.'"));
+ Отказ = Истина;
+ Возврат;
+ КонецЕсли;
+
+ ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Пометить ""%1"" на удаление?'"),
+ Вариант.Наименование
+ );
+
+ Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
+ Если Ответ <> КодВозвратаДиалога.Да Тогда
+ Отказ = Истина;
+ Возврат;
+ КонецЕсли;
+
+ УдалитьВариантДополнительногоОтчета("ВнешнийОтчет." + Объект.ИмяОбъекта, Вариант.КлючВарианта);
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ КомандыОбработки
&НаКлиенте
Процедура КомандыОбработкиПередНачаломИзменения(Элемент, Отказ)
- Если Элемент.ТекущийЭлемент = Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыИспользование Тогда
+ ТекущиеДанные = Элемент.ТекущиеДанные;
+ Если ТекущиеДанные = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ ИмяТекущегоЭлемента = Элемент.ТекущийЭлемент.Имя;
+
+ Если ИмяТекущегоЭлемента = "КомандыИспользование" ИЛИ ИмяТекущегоЭлемента = "КомандыРасписание" Тогда
- Если НЕ Элемент.ТекущиеДанные.Разрешено Тогда
+ Если НЕ ТекущиеДанные.Разрешено Тогда
- Отказ = Истина;
Предупреждение(
НСтр("ru = 'Команда используется только на клиенте.
|Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'")
);
- ИначеЕсли Элемент.ТекущиеДанные.РасписаниеПредставление = стрРасписаниеНеЗадано()Тогда
-
- УстановитьРасписание(Элементы.КомандыОбработки.ТекущиеДанные, Отказ);
-
+ Отказ = Истина;
+ Возврат;
КонецЕсли;
- ИначеЕсли Элемент.ТекущийЭлемент = Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыРасписание Тогда
-
- Если НЕ Элемент.ТекущиеДанные.Разрешено Тогда
+ Если ИмяТекущегоЭлемента = "КомандыРасписание" Тогда
Отказ = Истина;
КонецЕсли;
- ИначеЕсли Элемент.ТекущийЭлемент = Элементы.КомандыОбработки.ПодчиненныеЭлементы.БыстрыйДоступПредставление Тогда
+ Если НЕ ТекущиеДанные.Использование ИЛИ ИмяТекущегоЭлемента = "КомандыРасписание" Тогда
+ УстановитьРасписание(ТекущиеДанные);
+ КонецЕсли;
+
+ ИначеЕсли ИмяТекущегоЭлемента = "БыстрыйДоступПредставление" Тогда
НастроитьБыстрыйДоступОбщийОбработчик(Элемент.ТекущиеДанные);
Отказ = Истина;
@@ -141,21 +211,6 @@
КонецПроцедуры
-&НаКлиенте
-Процедура КомандыРасписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
-
- СтандартнаяОбработка = Ложь;
-
- ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные;
-
- Если НЕ ТекущиеДанные.Разрешено Тогда
- Возврат;
- КонецЕсли;
-
- УстановитьРасписание(ТекущиеДанные);
-
-КонецПроцедуры
-
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
@@ -179,7 +234,7 @@
ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогСохраненияФайла.ПолноеИмяФайла = Объект.ИмяФайла;
ДиалогСохраненияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения();
- ДиалогСохраненияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 0, 1);
+ ДиалогСохраненияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 1, 2);
ДиалогСохраненияФайла.МножественныйВыбор = Ложь;
ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Укажите файл'");
@@ -213,6 +268,7 @@
ПараметрыФормы.Вставить("ФильтрПоОбъектамМетаданных", ФильтрПоОбъектамМетаданных);
ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", ВыбранныеОбъектыМетаданных);
+ ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Назначение дополнительной обработки'"));
ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы);
@@ -228,11 +284,7 @@
КонецЕсли;
Если ТекущиеДанные.Разрешено Тогда
- Отказ = Ложь;
- УстановитьРасписание(ТекущиеДанные, Отказ);
- Если НЕ Отказ Тогда
- Модифицированность = Истина;
- КонецЕсли;
+ УстановитьРасписание(ТекущиеДанные);
Иначе
Предупреждение(НСтр("ru = 'Команда используется только на клиенте.
|Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'"));
@@ -265,7 +317,7 @@
КонецПроцедуры
&НаКлиенте
-Процедура НастроитьБыстрыйДоступ(Команда)
+Процедура НастроитьБыстрыйДоступККоманде(Команда)
ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные;
@@ -277,6 +329,29 @@
КонецПроцедуры
+&НаКлиенте
+Процедура ВариантыДополнительногоОтчетаОткрыть(Команда)
+ Вариант = ЭтаФорма.Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные;
+ Если Вариант = Неопределено Тогда
+ Предупреждение(НСтр("ru = 'Выберите вариант отчета.'"));
+ Возврат;
+ КонецЕсли;
+
+ ДополнительныеОтчетыИОбработкиКлиент.ОткрытьВариантДополнительногоОтчета(Объект.Ссылка, Вариант.КлючВарианта);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура РазместитьВРазделах(Команда)
+ МассивВариантов = Новый Массив;
+ Для Каждого ИдентификаторСтроки Из Элементы.ВариантыДополнительногоОтчета.ВыделенныеСтроки Цикл
+ Вариант = ВариантыДополнительногоОтчета.НайтиПоИдентификатору(ИдентификаторСтроки);
+ Если ЗначениеЗаполнено(Вариант.Ссылка) Тогда
+ МассивВариантов.Добавить(Вариант.Ссылка);
+ КонецЕсли;
+ КонецЦикла;
+ СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьДиалогРамещенияВариантовДопольнительныхОтчетовВРазделах(МассивВариантов);
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
@@ -301,6 +376,11 @@
Возврат ФильтрПоОбъектамМетаданных;
КонецФункции
+&НаСервереБезКонтекста
+Процедура УдалитьВариантДополнительногоОтчета(КлючОбъекта, КлючВарианта)
+ ХранилищаНастроек["ХранилищеВариантовОтчетов"].Удалить(КлючОбъекта, КлючВарианта, Неопределено);
+КонецПроцедуры
+
&НаСервере
Функция ЗарегистрироватьОбработку(ПараметрыРегистрации)
// Получает файл обработки из временного хранилища, пытается создать объект
@@ -372,25 +452,25 @@
КонецЕсли;
// Получение сведений о внешней обработке
- ВнешняяОбработка = Менеджер.Создать(Результат.ИмяОбъекта);
+ ВнешнийОбъект = Менеджер.Создать(Результат.ИмяОбъекта);
Попытка
- РегистрационныеДанные = ВнешняяОбработка.СведенияОВнешнейОбработке();
+ РегистрационныеДанные = ВнешнийОбъект.СведенияОВнешнейОбработке();
Исключение
Префикс = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Ошибка получения сведений о внешней обработке ""%1"" при ее загрузке:'"),
ПараметрыРегистрации.ИмяФайла
- ) + Символы.ПС;
+ );
Если Не ЭтоНовый Тогда
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Дополнительные отчеты и обработки'"),
УровеньЖурналаРегистрации.Ошибка,
Метаданные.Справочники.ДополнительныеОтчетыИОбработки,
Объект.Ссылка,
- Префикс + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
+ Префикс + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
);
КонецЕсли;
- Результат.КраткоеПредставлениеОшибки = Префикс + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
+ Результат.КраткоеПредставлениеОшибки = Префикс + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Возврат Результат;
КонецПопытки;
@@ -403,43 +483,52 @@
КонецЕсли;
Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок[РегистрационныеДанные.Вид];
- Если ПараметрыРегистрации.ЭтоОтчет <> (Вид = ВидДополнительныйОтчет ИЛИ Вид = ВидОтчет) Тогда
+ Если НЕ ЭтоНовый И Вид <> Объект.Вид Тогда
+ Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Невозможно сменить вид существующего дополнительного отчета или обработки.'");
+ Возврат Результат;
+ ИначеЕсли ПараметрыРегистрации.ЭтоОтчет <> (Вид = ВидДополнительныйОтчет ИЛИ Вид = ВидОтчет) Тогда
Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Вид обработки, указанный в сведениях о внешней обработке, не соответствует её расширению.'");
Возврат Результат;
КонецЕсли;
// Инициализация сведений об обработке
- ОбъектЗначение = РеквизитФормыВЗначение("Объект");
- ОбъектЗначение.Наименование = РегистрационныеДанные.Наименование;
- ОбъектЗначение.Версия = РегистрационныеДанные.Версия;
- ОбъектЗначение.БезопасныйРежим = РегистрационныеДанные.БезопасныйРежим;
- ОбъектЗначение.Информация = РегистрационныеДанные.Информация;
- ОбъектЗначение.ИмяФайла = ПараметрыРегистрации.ИмяФайла;
- ОбъектЗначение.ИмяОбъекта = Результат.ИмяОбъекта;
+ ТекущийОбъект = РеквизитФормыВЗначение("Объект");
+ ТекущийОбъект.Наименование = РегистрационныеДанные.Наименование;
+ ТекущийОбъект.Версия = РегистрационныеДанные.Версия;
+ ТекущийОбъект.БезопасныйРежим = РегистрационныеДанные.БезопасныйРежим;
+ ТекущийОбъект.Информация = РегистрационныеДанные.Информация;
+ ТекущийОбъект.ИмяФайла = ПараметрыРегистрации.ИмяФайла;
+ ТекущийОбъект.ИмяОбъекта = Результат.ИмяОбъекта;
+
+ ТекущийОбъект.ИспользуетХранилищеВариантов = Ложь;
+ Если Вид = ВидДополнительныйОтчет Тогда
+ Если Метаданные.ХранилищеВариантовОтчетов <> Неопределено
+ И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов" Тогда
+ ТекущийОбъект.ИспользуетХранилищеВариантов = Истина;
+ Иначе
+ ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные();
+ Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено
+ И ВнешнийОбъектМетаданные.ХранилищеВариантов.Имя = "ХранилищеВариантовОтчетов" Тогда
+ ТекущийОбъект.ИспользуетХранилищеВариантов = Истина;
+ КонецЕсли;
+ КонецЕсли;
+ КонецЕсли;
// Загружена другая обработка (изменилось имя объекта или вид обработки)
- Если Объект.ИмяОбъекта <> Результат.ИмяОбъекта ИЛИ Объект.Вид <> Вид Тогда
- ОбъектЗначение.Назначение.Очистить();
- ОбъектЗначение.Вид = Вид;
+ Если ЭтоНовый ИЛИ ТекущийОбъект.ИмяОбъекта <> Результат.ИмяОбъекта ИЛИ ТекущийОбъект.Вид <> Вид Тогда
+ ТекущийОбъект.Назначение.Очистить();
+ ТекущийОбъект.Вид = Вид;
КонецЕсли;
// Если не заполнено назначение - устанавливаем назначение из обработки
- Если
- (
- ЭтоНовый
- ИЛИ ОбъектЗначение.Назначение.Количество() = 0
- )
- И (
- ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта
- ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет
- ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма
- ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов
- ) Тогда
+ Если ТекущийОбъект.Назначение.Количество() = 0
+ И Вид <> ВидДополнительныйОтчет
+ И Вид <> ВидДополнительнаяОбработка Тогда
- ОбъектЗначение.ИспользоватьДляФормыОбъекта = Истина;
- ОбъектЗначение.ИспользоватьДляФормыСписка = Истина;
+ ТекущийОбъект.ИспользоватьДляФормыОбъекта = Истина;
+ ТекущийОбъект.ИспользоватьДляФормыСписка = Истина;
- ПолноеНазначениеЗначение = ДополнительныеОтчетыИОбработки.ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки(ОбъектЗначение.Вид);
+ ПолноеНазначениеЗначение = ДополнительныеОтчетыИОбработки.ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки(ТекущийОбъект.Вид);
Если РегистрационныеДанные.Свойство("Назначение") Тогда
@@ -452,14 +541,14 @@
НайденныеНазначения = ПолноеНазначениеЗначение.НайтиСтроки(Новый Структура("Класс", РазделеннаяСтрока[0]));
Для Каждого ЭлементНайденноеНазначение Из НайденныеНазначения Цикл
- НоваяСтрока = ОбъектЗначение.Назначение.Добавить();
+ НоваяСтрока = ТекущийОбъект.Назначение.Добавить();
НоваяСтрока.ПолноеИмяОбъектаМетаданных = ЭлементНайденноеНазначение.ПолноеИмяОбъектаМетаданных;
КонецЦикла;
Иначе
Если ПолноеНазначениеЗначение.НайтиСтроки(Новый Структура("ПолноеИмяОбъектаМетаданных", ЭлементЗаданноеНазначение)).Количество() > 0 Тогда
- НоваяСтрока = ОбъектЗначение.Назначение.Добавить();
+ НоваяСтрока = ТекущийОбъект.Назначение.Добавить();
НоваяСтрока.ПолноеИмяОбъектаМетаданных = ЭлементЗаданноеНазначение;
КонецЕсли;
@@ -468,24 +557,24 @@
КонецЦикла;
КонецЕсли;
- ОбъектЗначение.Назначение.Свернуть("ПолноеИмяОбъектаМетаданных", "");
+ ТекущийОбъект.Назначение.Свернуть("ПолноеИмяОбъектаМетаданных", "");
ЗначениеВРеквизитФормы(ПолноеНазначениеЗначение, "ПолноеНазначение");
КонецЕсли;
- КомандыСохраненные = ОбъектЗначение.Команды.Выгрузить();
+ КомандыСохраненные = ТекущийОбъект.Команды.Выгрузить();
- ОбъектЗначение.Команды.Очистить();
+ ТекущийОбъект.Команды.Очистить();
// Инициализация команд
Для Каждого ЭлементОписаниеКоманды Из РегистрационныеДанные.Команды Цикл
- НоваяСтрока = ОбъектЗначение.Команды.Добавить();
- НоваяСтрока.Идентификатор = ЭлементОписаниеКоманды.Идентификатор;
- НоваяСтрока.Представление = ЭлементОписаниеКоманды.Представление;
- НоваяСтрока.Модификатор = ЭлементОписаниеКоманды.Модификатор;
+ НоваяСтрока = ТекущийОбъект.Команды.Добавить();
+ НоваяСтрока.Идентификатор = ЭлементОписаниеКоманды.Идентификатор;
+ НоваяСтрока.Представление = ЭлементОписаниеКоманды.Представление;
+ НоваяСтрока.Модификатор = ЭлементОписаниеКоманды.Модификатор;
НоваяСтрока.ПоказыватьОповещение = ЭлементОписаниеКоманды.ПоказыватьОповещение;
Если ЭлементОписаниеКоманды.Использование = "ОткрытиеФормы" Тогда
@@ -502,15 +591,16 @@
КонецЦикла;
- ОбъектЗначение.Ответственный = Пользователи.ТекущийПользователь();
+ ТекущийОбъект.Ответственный = Пользователи.ТекущийПользователь();
- ЗначениеВРеквизитФормы(ОбъектЗначение, "Объект");
+ ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект");
УстановитьЭлементыФормы(Истина);
ЗаполнитьКоманды(КомандыСохраненные);
Результат.Успешно = Истина;
+ РегистрацияОбработки = Истина;
Возврат Результат;
КонецФункции
@@ -527,8 +617,7 @@
НоваяКоманда.Представление = ЭлементКоманда.Представление;
НоваяКоманда.Идентификатор = ЭлементКоманда.Идентификатор;
- Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка
- ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
+ Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда
ТекстЗапроса =
"ВЫБРАТЬ
@@ -556,7 +645,11 @@
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
- Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка
+ Если НЕ ПравоДобавления Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если Объект.Вид = ВидДополнительнаяОбработка
И ЭлементКоманда.ВариантЗапуска = Перечисления.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода Тогда
// Можно задавать расписание и указывать использование
@@ -582,34 +675,31 @@
Если ЗначениеЗаполнено(РегламентноеЗаданиеGUID) Тогда
- РегламентноеЗадание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID);
+ РегламентноеЗадание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID, Истина);
- Если РегламентноеЗадание = Неопределено Тогда
-
- ЭлементКоманда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
-
- Иначе
+ Если РегламентноеЗадание <> Неопределено Тогда
ЭлементКоманда.РегламентноеЗаданиеGUID = РегламентноеЗаданиеGUID;
НоваяКоманда.РасписаниеПредставление = Строка(РегламентноеЗадание.Расписание);
- НоваяКоманда.Использование = РегламентноеЗадание.Использование;
+ НоваяКоманда.Использование = РегламентноеЗадание.Использование;
НоваяКоманда.Расписание.Добавить(РегламентноеЗадание.Расписание);
РегламентноеЗаданиеЗадано = Истина;
+
КонецЕсли;
КонецЕсли;
Если НЕ РегламентноеЗаданиеЗадано Тогда
НоваяКоманда.РасписаниеПредставление = стрРасписаниеНеЗадано();
- НоваяКоманда.Использование = Ложь;
+ НоваяКоманда.Использование = Ложь;
КонецЕсли;
Иначе
НоваяКоманда.РасписаниеПредставление = НСтр("ru = 'Не применимо - команда используется только на клиенте'");
- НоваяКоманда.Использование = Ложь;
- НоваяКоманда.Разрешено = Ложь;
+ НоваяКоманда.Использование = Ложь;
+ НоваяКоманда.Разрешено = Ложь;
КонецЕсли;
КонецЦикла;
@@ -619,25 +709,63 @@
&НаСервере
Процедура УстановитьЭлементыФормы(Регистрация = Ложь)
+ Если НЕ Регистрация И НЕ ЭтоНовый И (Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет) Тогда
+ ВариантыДополнительногоОтчетаЗаполнить();
+ Иначе
+ ВариантыДополнительногоОтчета.Очистить();
+ КонецЕсли;
+
+ Если Объект.Вид = ВидДополнительныйОтчет И Объект.ИспользуетХранилищеВариантов Тогда
+ // Выводить закладки
+ Элементы.СтраницыВариантыКоманды.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
+ Элементы.СтраницыВариантыКоманды.ТекущаяСтраница = Элементы.СтраницаВарианты;
+
+ КоличествоВариантов = ВариантыДополнительногоОтчета.Количество();
+ Если Регистрация ИЛИ КоличествоВариантов = 0 Тогда
+ Элементы.СтраницыВарианты.ТекущаяСтраница = Элементы.ВариантыСкрытьДоЗаписи;
+ Элементы.СтраницаВарианты.Заголовок = НСтр("ru = 'Варианты отчета'");
+ Иначе
+ Элементы.СтраницыВарианты.ТекущаяСтраница = Элементы.ВариантыПоказать;
+ Элементы.СтраницаВарианты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Варианты отчета (%1)'"),
+ Формат(КоличествоВариантов, "ЧГ=")
+ );
+ КонецЕсли;
+
+ КоличествоКоманд = Объект.Команды.Количество();
+ Если КоличествоКоманд = 0 Тогда
+ Элементы.СтраницаКоманды.Заголовок = НСтр("ru = 'Команды'");
+ Иначе
+ Элементы.СтраницаКоманды.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Команды (%1)'"),
+ Формат(КоличествоКоманд, "ЧГ=")
+ );
+ КонецЕсли;
+
+ Иначе
+ // Без закладок
+ Элементы.СтраницыВариантыКоманды.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет;
+ Элементы.СтраницыВариантыКоманды.ТекущаяСтраница = Элементы.СтраницаКоманды;
+
+ КонецЕсли;
+
+
Если Регистрация ИЛИ ЗначениеЗаполнено(Объект.Ссылка)Тогда
- Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка
- ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
-
- Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыРасписание.Видимость = Истина;
- Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыИспользование.Видимость = Истина;
+ Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда
- Элементы.СтраницыРазделыНазначение.ТекущаяСтраница =
- Элементы.СтраницаРазделы;
+ Элементы.КомандыРасписание.Видимость = ПравоДобавления;
+ Элементы.КомандыИспользование.Видимость = ПравоДобавления;
+
+ Элементы.СтраницыРазделыНазначение.ТекущаяСтраница = Элементы.СтраницаРазделы;
ИначеЕсли ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Объект.Вид) Тогда
- Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыРасписание.Видимость = Ложь;
- Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыИспользование.Видимость = Ложь;
+ Элементы.КомандыРасписание.Видимость = Ложь;
+ Элементы.КомандыИспользование.Видимость = Ложь;
+
+ Элементы.СтраницыРазделыНазначение.ТекущаяСтраница = Элементы.СтраницаНазначение;
- Элементы.СтраницыРазделыНазначение.ТекущаяСтраница =
- Элементы.СтраницаНазначение;
-
Элементы.КомандыОбработкиНастроитьБыстрыйДоступККоманде.Видимость = Ложь;
Элементы.КомандыОбработкиНастроитьРасписаниеКоманды.Видимость = Ложь;
@@ -646,23 +774,27 @@
КонецЕсли;
Если Объект.БезопасныйРежим Тогда
- Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница =
- Элементы.ГруппаИнформация;
+ Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда
+ Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаИнформацияОтчета;
+ Иначе
+ Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаИнформацияОбработки;
+ КонецЕсли;
Иначе
- Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница =
- Элементы.ГруппаПредупреждение;
+ Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда
+ Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаПредупреждениеОтчета;
+ Иначе
+ Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаПредупреждениеОбработки;
+ КонецЕсли;
КонецЕсли;
Если ЭтоНовый Тогда
- Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет
- ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда
+ Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда
Заголовок = НСтр("ru = 'Дополнительный отчет (создание)'");
Иначе
Заголовок = НСтр("ru = 'Дополнительная обработка (создание)'");
КонецЕсли;
Иначе
- Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет
- ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда
+ Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда
Заголовок = Объект.Наименование + " " + НСтр("ru = '(Дополнительный отчет)'");
Иначе
Заголовок = Объект.Наименование + " " + НСтр("ru = '(Дополнительная обработка)'");
@@ -673,6 +805,62 @@
КонецПроцедуры
+&НаСервере
+Процедура ВариантыДополнительногоОтчетаЗаполнить()
+ ВариантыДополнительногоОтчета.Очистить();
+
+ ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Объект.Ссылка);
+ ОтчетМетаданные = ВнешнийОбъект.Метаданные();
+ СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных;
+ Если СхемаКДМетаданные <> Неопределено Тогда
+ СхемаКД = ВнешнийОбъект.ПолучитьМакет(СхемаКДМетаданные.Имя);
+ Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл
+ ВариантСсылка = Неопределено;
+ КлючВарианта = ВариантНастроекКД.Имя;
+ СтандартныеПодсистемыПереопределяемый.СсылкаВариантаДополнительногоОтчета(Объект.Ссылка, КлючВарианта, ВариантСсылка);
+ Если ВариантСсылка <> Неопределено Тогда
+ Вариант = ВариантыДополнительногоОтчета.Добавить();
+ Вариант.КлючВарианта = КлючВарианта;
+ Вариант.Наименование = ВариантНастроекКД.Представление;
+ Вариант.Пользовательский = Ложь;
+ Вариант.ИндексКартинки = 4;
+ Вариант.Ссылка = ВариантСсылка;
+ КонецЕсли;
+ КонецЦикла;
+ Иначе
+ ВариантСсылка = Неопределено;
+ КлючВарианта = "";
+ СтандартныеПодсистемыПереопределяемый.СсылкаВариантаДополнительногоОтчета(Объект.Ссылка, КлючВарианта, ВариантСсылка);
+ Если ВариантСсылка <> Неопределено Тогда
+ Вариант = ВариантыДополнительногоОтчета.Добавить();
+ Вариант.КлючВарианта = КлючВарианта;
+ Вариант.Наименование = ОтчетМетаданные.Представление();
+ Вариант.Пользовательский = Ложь;
+ Вариант.ИндексКартинки = 4;
+ Вариант.Ссылка = ВариантСсылка;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если Объект.ИспользуетХранилищеВариантов Тогда
+ Хранилище = ХранилищаНастроек["ХранилищеВариантовОтчетов"];
+ КлючОбъекта = Объект.Ссылка;
+ Иначе
+ Хранилище = ХранилищеВариантовОтчетов;
+ КлючОбъекта = "ВнешнийОтчет." + Объект.ИмяОбъекта;
+ КонецЕсли;
+
+ СписокНастроек = Хранилище.ПолучитьСписок(КлючОбъекта);
+
+ Для Каждого ЭлементСписка Из СписокНастроек Цикл
+ Вариант = ВариантыДополнительногоОтчета.Добавить();
+ Вариант.КлючВарианта = ЭлементСписка.Значение;
+ Вариант.Наименование = ЭлементСписка.Представление;
+ Вариант.Пользовательский = Истина;
+ Вариант.ИндексКартинки = 2;
+ СтандартныеПодсистемыПереопределяемый.СсылкаВариантаДополнительногоОтчета(Объект.Ссылка, Вариант.КлючВарианта, Вариант.Ссылка);
+ КонецЦикла;
+КонецПроцедуры
+
&НаКлиенте
Процедура НастроитьБыстрыйДоступОбщийОбработчик(ТекущиеДанные)
@@ -702,6 +890,10 @@
&НаКлиенте
Функция ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(ФлагДобавить, ПараметрыРегистрации = Неопределено)
+ Если НЕ ПравоДобавления Тогда
+ ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа.'");
+ КонецЕсли;
+
// Выбор файла
Если ПараметрыРегистрации = Неопределено Тогда
ПараметрыРегистрации = Новый Структура("ИмяФайла, ЭтоОтчет, ОтключатьКонфликтующие, Конфликтующие");
@@ -719,7 +911,7 @@
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.ПолноеИмяФайла = Объект.ИмяФайла;
ДиалогОткрытияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения();
- ДиалогОткрытияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 0, 1);
+ ДиалогОткрытияФайла.ИндексФильтра = ?(Объект.Ссылка.Пустая(), 0, ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 1, 2));
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите дополнительный отчет или обработку'");
@@ -761,7 +953,6 @@
// Обработка результата работы сервера
Если РезультатРегистрации.Успешно = Истина Тогда
- РегистрацияОбработки = Истина;
Модифицированность = Истина;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Файл обработки успешно загружен'"),
@@ -901,7 +1092,7 @@
КонецФункции
&НаКлиенте
-Процедура УстановитьРасписание(ТекущиеДанные, Отказ = Ложь)
+Процедура УстановитьРасписание(ТекущиеДанные)
Если ТекущиеДанные.Расписание.Количество() > 0 Тогда
Расписание = ТекущиеДанные.Расписание.Получить(0).Значение;
@@ -919,13 +1110,32 @@
Если ТекущиеДанные.РасписаниеПредставление = ПредставлениеПустогоРасписания() Тогда
ТекущиеДанные.РасписаниеПредставление = стрРасписаниеНеЗадано();
ТекущиеДанные.Использование = Ложь;
- Отказ = Истина;
+ Модифицированность = Истина;
Иначе
ТекущиеДанные.Использование = Истина;
КонецЕсли;
КонецПроцедуры
+&НаКлиенте
+Процедура ОткрытьВариант()
+ Вариант = Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные;
+ Если Вариант = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда
+ Предупреждение(
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Вариант отчета ""%1"" не зарегистрирован.'"),
+ Вариант.Наименование
+ )
+ );
+ Иначе
+ ОткрытьЗначение(Вариант.Ссылка);
+ КонецЕсли;
+КонецПроцедуры
+
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеПустогоРасписания()
@@ -964,4 +1174,3 @@
Возврат БыстрыйДоступПредставление;
КонецФункции
-
diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html
index a42bc1b93..9bc1033f4 100644
--- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html
+++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html
@@ -1,2 +1,2 @@
-
+
Для хранения в ИБ дополнительных отчетов и обработок служит справочник Дополнительные отчеты и обработки. По команде Создать система предложит выбрать файл внешней обработки или отчета, и настроить его параметры.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl
index aebf99e78..8d74c613e 100644
--- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -32,7 +34,7 @@
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта);
Запрос.УстановитьПараметр("ВидыДопОтчетов", ВидыДопОтчетов);
- Запрос.УстановитьПараметр("Ссылка", Ссылка);
+ Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = ТекстЗапроса;
УстановитьПривилегированныйРежим(Истина);
@@ -49,7 +51,7 @@
ИмяОбъекта,
Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется),
Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки),
- Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется)
+ Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена)
),
,
"Объект.Публикация"
@@ -60,33 +62,277 @@
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
-
- Если ОбменДанными.Загрузка Тогда
+ // Вызывается непосредственно до записи объекта в базу данных
+ Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда
Возврат;
КонецЕсли;
- Если ЭтоГруппа Тогда
- Возврат; // группы не обрабатываем
+ Если НЕ ЭтоНовый() И Вид <> ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Вид") Тогда
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+ НСтр("ru = 'Невозможно сменить вид существующего дополнительного отчета или обработки.'"),,,,
+ Отказ
+ );
+ Возврат;
КонецЕсли;
- Если НЕ ЭтоНовый() Тогда
- Если Вид <> ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Вид") Тогда
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
- НСтр("ru = 'Невозможно сменить вид у существующего дополнительного отчета или обработки.'"),,,,
- Отказ);
+ Если ПометкаУдаления Тогда
+ Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена;
+ КонецЕсли;
+
+ Если ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда
+ Если ДополнительныеОтчетыИОбработки.ПравоДобавления() Тогда
+ ПередЗаписьюГлобальнойОбработки(Отказ);
КонецЕсли;
- КонецЕсли;
-
- Если ПометкаУдаления Тогда
- Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется;
- КонецЕсли;
-
- Если ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Вид) Тогда
+ Иначе
ПередЗаписьюНазначаемойОбработки(Отказ);
КонецЕсли;
КонецПроцедуры
+Процедура ПриЗаписи(Отказ)
+ // Вызывается непосредственно после записи объекта в базу данных
+ Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТаблицаКоманд = Неопределено;
+ Если ДополнительныеСвойства.Свойство("КомандыОбработки", ТаблицаКоманд) Тогда
+ ДополнительныеОтчетыИОбработки.ЗаписатьНастройкиБыстрогоДоступа(Ссылка, ТаблицаКоманд);
+ КонецЕсли;
+
+ Если ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда
+ Если ДополнительныеОтчетыИОбработки.ПравоДобавления() Тогда
+ ПриЗаписиГлобальнойОбработки(Отказ);
+ КонецЕсли;
+ КонецЕсли;
+
+ СтандартныеПодсистемыПереопределяемый.ОбработкаВариантовДополнительногоОтчета(ЭтотОбъект, Отказ);
+
+КонецПроцедуры
+
+Процедура ПередУдалением(Отказ)
+ // Вызывается непосредственно перед удалением объекта из базы данных
+ Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда
+ ПередУдалениемГлобальнойОбработки(Отказ);
+ Иначе
+ ПередУдалениемНазначаемойОбработки(Отказ);
+ КонецЕсли;
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+////////////////////////////////////////////////////////////////////////////////
+// Глобальные обработки
+
+Процедура ПередЗаписьюГлобальнойОбработки(Отказ)
+ Если НЕ ДополнительныеСвойства.Свойство("КомандыОбработки") Тогда
+ Возврат;
+ КонецЕсли;
+
+ ТаблицаКоманд = ДополнительныеСвойства.КомандыОбработки;
+
+ ЗаданияДляОбновления = Новый Соответствие;
+
+ ПубликацияВключена = (Публикация <> Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена);
+
+ // Регламентные задание необходимо изменять в неразделенном режиме.
+ РазделениеВключено = РазделениеВключено();
+ УстанавливатьПривилегированныйРежим = РазделениеВключено ИЛИ УстанавливатьПривилегированныйРежим();
+
+ Если УстанавливатьПривилегированныйРежим Тогда
+ УстановитьПривилегированныйРежим(Истина);
+ КонецЕсли;
+
+ Если РазделениеВключено Тогда
+ ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь);
+ КонецЕсли;
+
+ // Актуализация набора регламентных заданий для записи их идентификаторов в табличную часть.
+ Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл
+
+ Если ПубликацияВключена И СтрокаТаблицы.Расписание.Количество() > 0 Тогда
+ Расписание = СтрокаТаблицы.Расписание[0].Значение;
+ Использование = СтрокаТаблицы.Использование И РасписаниеЗадано(Расписание);
+ Иначе
+ Использование = Ложь;
+ КонецЕсли;
+
+ Команда = Команды.НайтиСтроки(Новый Структура("Идентификатор", СтрокаТаблицы.Идентификатор))[0];
+
+ Задание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID);
+
+ Если Задание = Неопределено Тогда // Не найдено
+
+ Если Использование Тогда
+ // Создать и зарегистрировать
+ Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок");
+ Задание.Использование = Ложь;
+ Задание.Наименование = ПредставлениеЗадания(Команда);
+ Задание.Записать();
+
+ Команда.РегламентноеЗаданиеGUID = Задание.УникальныйИдентификатор;
+
+ ЗаданияДляОбновления.Вставить(Команда, Расписание);
+ Иначе
+ // Действие не требуется
+ КонецЕсли;
+
+ Иначе // Найдено
+
+ Если Использование Тогда
+ // Зарегистрировать
+ ЗаданияДляОбновления.Вставить(Команда, Расписание);
+ Иначе
+ // Удалить
+ Задание.Удалить();
+ Команда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
+ КонецЕсли;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ДополнительныеСвойства.Вставить("ЗаданияДляОбновления", ЗаданияДляОбновления);
+
+ Если РазделениеВключено Тогда
+ ОбщегоНазначения.УстановитьРазделениеСеанса(Истина);
+ КонецЕсли;
+
+ Если УстанавливатьПривилегированныйРежим Тогда
+ УстановитьПривилегированныйРежим(Ложь);
+ КонецЕсли;
+
+КонецПроцедуры
+
+Процедура ПриЗаписиГлобальнойОбработки(Отказ)
+ Если НЕ ДополнительныеСвойства.Свойство("КомандыОбработки") Тогда
+ Возврат;
+ КонецЕсли;
+
+ ЗаданияДляПостановкиВОчередь = Новый Массив;
+
+ // Регламентные задание необходимо изменять в неразделенном режиме.
+ РазделениеВключено = РазделениеВключено();
+ УстанавливатьПривилегированныйРежим = РазделениеВключено ИЛИ УстанавливатьПривилегированныйРежим();
+
+ Если УстанавливатьПривилегированныйРежим Тогда
+ УстановитьПривилегированныйРежим(Истина);
+ КонецЕсли;
+
+ Если РазделениеВключено Тогда
+ ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь);
+ КонецЕсли;
+
+ Для Каждого КлючИЗначение Из ДополнительныеСвойства.ЗаданияДляОбновления Цикл
+ Команда = КлючИЗначение.Ключ;
+ Расписание = КлючИЗначение.Значение;
+
+ Задание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID);
+
+ // При включенном разделении использование задания определяется очередью
+ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
+ ЗаданияДляПостановкиВОчередь.Добавить(Задание);
+ Иначе
+ Задание.Использование = Истина;
+ КонецЕсли;
+
+ ПараметрыЗадания = Новый Массив;
+ ПараметрыЗадания.Добавить(Ссылка);
+ ПараметрыЗадания.Добавить(Команда.Идентификатор);
+
+ Задание.Наименование = Лев(ПредставлениеЗадания(Команда), 120);
+ Задание.Параметры = ПараметрыЗадания;
+ Задание.Расписание = Расписание;
+
+ Задание.Записать();
+ КонецЦикла;
+
+ Если РазделениеВключено Тогда
+ ОбщегоНазначения.УстановитьРазделениеСеанса(Истина);
+ КонецЕсли;
+
+ Если УстанавливатьПривилегированныйРежим Тогда
+ УстановитьПривилегированныйРежим(Ложь);
+ КонецЕсли;
+
+ Для Каждого Задание Из ЗаданияДляПостановкиВОчередь Цикл
+ СтандартныеПодсистемыПереопределяемый.ПриЗаписиЗаданияДополнительнойОбработки(Задание, РазделениеВключено);
+ КонецЦикла;
+
+КонецПроцедуры
+
+Процедура ПередУдалениемГлобальнойОбработки(Отказ)
+ // Регламентные задание необходимо изменять в неразделенном режиме.
+ РазделениеВключено = РазделениеВключено();
+ УстанавливатьПривилегированныйРежим = РазделениеВключено ИЛИ УстанавливатьПривилегированныйРежим();
+
+ Если УстанавливатьПривилегированныйРежим Тогда
+ УстановитьПривилегированныйРежим(Истина);
+ КонецЕсли;
+
+ Если РазделениеВключено Тогда
+ ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь);
+ КонецЕсли;
+
+ Для Каждого Команда Из Команды Цикл
+ Задание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID);
+ Если Задание <> Неопределено Тогда
+ Задание.Удалить();
+ КонецЕсли;
+ КонецЦикла;
+
+ Если РазделениеВключено Тогда
+ ОбщегоНазначения.УстановитьРазделениеСеанса(Истина);
+ КонецЕсли;
+
+ Если УстанавливатьПривилегированныйРежим Тогда
+ УстановитьПривилегированныйРежим(Ложь);
+ КонецЕсли;
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// Работа с регламентными заданиями
+
+Функция ПредставлениеЗадания(Команда)
+ // '%1: %2 / Команда: %3'
+ Возврат (
+ СокрЛП(Вид)
+ + ": "
+ + СокрЛП(Наименование)
+ + " / "
+ + НСтр("ru = 'Команда'")
+ + ": "
+ + СокрЛП(Команда.Представление)
+ );
+КонецФункции
+
+Функция РасписаниеЗадано(Расписание)
+
+ Возврат Строка(Расписание) <> Строка(Новый РасписаниеРегламентногоЗадания);
+
+КонецФункции
+
+Функция РазделениеВключено()
+
+ Возврат ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначения.ИспользованиеРазделителяСеанса() = Истина;
+
+КонецФункции
+
+Функция УстанавливатьПривилегированныйРежим()
+
+ Возврат РольДоступна(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) И НЕ ПравоДоступа("Администрирование", Метаданные);
+
+КонецФункции
+
+////////////////////////////////////////////////////////////////////////////////
+// Назначаемые обработки
+
Процедура ПередЗаписьюНазначаемойОбработки(Отказ)
ИмяРесурса = ПолучитьИмяРесурсаПоВидуОбработки(Вид);
@@ -168,103 +414,26 @@
КонецПроцедуры
-Процедура ПриЗаписиГлобальнойОбработки(Отказ)
+Процедура ПередУдалениемНазначаемойОбработки(Отказ)
- ТаблицаКоманд = Неопределено;
- Если Не ДополнительныеСвойства.Свойство("КомандыОбработки", ТаблицаКоманд) Тогда
- Возврат;
+ ИмяРесурса = ПолучитьИмяРесурсаПоВидуОбработки(Вид);
+ МассивУдаляемых = Новый Массив;
+ Для Каждого ЭлементНазначение ИЗ Назначение Цикл
+ МассивУдаляемых.Добавить(ЭлементНазначение.ПолноеИмяОбъектаМетаданных);
+ КонецЦикла;
+
+ Если ИспользоватьДляФормыОбъекта Тогда
+ СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаОбъекта");
КонецЕсли;
- // переносим данные о регламентных заданиях в командах в объект
- // и обновляем регламентные задания, если требуется
- Для Каждого ЭлементКоманда Из ТаблицаКоманд Цикл
-
- Если ЭлементКоманда.Расписание.Количество() > 0 Тогда
- Расписание = ЭлементКоманда.Расписание.Получить(0).Значение;
- Иначе
- Расписание = ПредставлениеПустогоРасписания();
- КонецЕсли;
-
- КомандаВОбъекте = Команды.НайтиСтроки(Новый Структура("Идентификатор", ЭлементКоманда.Идентификатор))[0];
-
- Если Строка(Расписание) = ПредставлениеПустогоРасписания() Тогда // возможно было удалено регламентное задание
- Если ЗначениеЗаполнено(КомандаВОбъекте.РегламентноеЗаданиеGUID) Тогда
- ДополнительныеОтчетыИОбработки.УдалитьРегламентноеЗадание(КомандаВОбъекте.РегламентноеЗаданиеGUID);
- КомандаВОбъекте.РегламентноеЗаданиеGUID = "";
- КонецЕсли;
- Иначе
- ДополнительныеОтчетыИОбработки.ОбновитьСведенияПоРасписанию(
- ЭтотОбъект, КомандаВОбъекте, Расписание, ЭлементКоманда.Использование, Отказ);
- КонецЕсли;
-
- КонецЦикла;
-
-КонецПроцедуры
-
-Процедура ПриЗаписи(Отказ)
-
- Если ОбменДанными.Загрузка Тогда
- Возврат;
+ Если ИспользоватьДляФормыСписка Тогда
+ СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаСписка");
КонецЕсли;
- ТаблицаКоманд = Неопределено;
- Если ДополнительныеСвойства.Свойство("КомандыОбработки", ТаблицаКоманд) Тогда
- ДополнительныеОтчетыИОбработки.ЗаписатьНастройкиБыстрогоДоступа(Ссылка, ТаблицаКоманд);
- КонецЕсли;
-
- Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка
- ИЛИ Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда
- ПриЗаписиГлобальнойОбработки(Отказ);
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ПередУдалением(Отказ)
-
- Если ЭтоГруппа Тогда
- Возврат; // группы не обрабатываем
- КонецЕсли;
-
- Если ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Вид) Тогда
-
- ИмяРесурса = ПолучитьИмяРесурсаПоВидуОбработки(Вид);
- МассивУдаляемых = Новый Массив;
- Для Каждого ЭлементНазначение ИЗ Назначение Цикл
- МассивУдаляемых.Добавить(ЭлементНазначение.ПолноеИмяОбъектаМетаданных);
- КонецЦикла;
-
- Если ИспользоватьДляФормыОбъекта Тогда
- СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаОбъекта");
- КонецЕсли;
-
- Если ИспользоватьДляФормыСписка Тогда
- СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаСписка");
- КонецЕсли;
-
- Иначе
- Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда
- Для Каждого ЭлементКоманда Из Команды Цикл
- ДополнительныеОтчетыИОбработки.УдалитьРегламентноеЗадание(ЭлементКоманда.РегламентноеЗаданиеGUID);
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ПриКопировании(ОбъектКопирования)
-
- РегламентноеЗаданиеGUID = "";
-
-КонецПроцедуры
-
-Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
-
- РегламентноеЗаданиеGUID = "";
-
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
-// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+// Другое
Функция СверткаПоПолю(Таблица1, Таблица2, ИмяПоля, ИмяТипаПоля)
@@ -366,9 +535,5 @@
КонецФункции
-Функция ПредставлениеПустогоРасписания()
-
- Возврат Строка(Новый РасписаниеРегламентногоЗадания);
-
-КонецФункции
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo
index d699a549b..a03fe64ec 100644
--- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo
+++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo
@@ -194,7 +194,7 @@
String
- 260
+ 256
@@ -244,7 +244,7 @@
ru
- Краткая информация
+ Краткая информация о внешней обработке
@@ -389,6 +389,22 @@
Use
+
+ ИспользуетХранилищеВариантов
+
+ ru
+ Использует хранилище вариантов
+
+
+ Boolean
+
+
+
+
+ Index
+ Use
+ Use
+
@@ -647,7 +663,7 @@
ФормаЭлементаru
- Форма элемента
+ Дополнительный отчет или обработка
diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form
index c6319f4e9..c0ca4d958 100644
--- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form
+++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form
@@ -22,6 +22,10 @@
ВыбранныйЦвет
+
+ ru
+ Отбор заметок по цвету значка
+ OnChangeФильтрПоЦветуПриИзменении
@@ -111,6 +115,10 @@
ВыбранныйПредмет
+
+ ru
+ Отбор заметок по предмету
+ OnChangeФильтрПоПредметуПриИзменении
@@ -165,6 +173,10 @@
ПоказыватьУдаленныеRight
+
+ ru
+ Отображать в списке заметки, помеченные на удаление
+ OnChangeПоказыватьУдаленныеПриИзменении
diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form
index d01dcb611..4d5124332 100644
--- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form
+++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form
@@ -64,10 +64,12 @@
LabelFieldEnter
+ truetrueLefttrue
+ 5truetrue
@@ -104,6 +106,7 @@
Lefttrue
+ 5truetrue
@@ -121,6 +124,8 @@
ruСодержание
+ 5
+ falseСодержаниеРасширеннаяПодсказка21
diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form
index 45ba45603..5b1f50f84 100644
--- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form
@@ -52,6 +52,10 @@
true
+
+ ru
+ Предмет, по которому сделана заметка
+ ПредметРасширеннаяПодсказка111
@@ -405,6 +409,10 @@
true
+
+ ru
+ Автор заметки
+ АвторРасширеннаяПодсказка123
diff --git a/SSL/src/Catalogs/Заметки/ObjectModule.bsl b/SSL/src/Catalogs/Заметки/ObjectModule.bsl
index 6d9209893..a91950f2b 100644
--- a/SSL/src/Catalogs/Заметки/ObjectModule.bsl
+++ b/SSL/src/Catalogs/Заметки/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -29,3 +31,5 @@
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/Заметки/Заметки.mdo b/SSL/src/Catalogs/Заметки/Заметки.mdo
index 67a3a4e1d..011df259d 100644
--- a/SSL/src/Catalogs/Заметки/Заметки.mdo
+++ b/SSL/src/Catalogs/Заметки/Заметки.mdo
@@ -72,6 +72,10 @@
ruГруппа заметок
+
+ ru
+ Группа, в которой находится заметка
+ trueCatalog.Заметки.EmptyRef
@@ -122,6 +126,10 @@
CatalogRef.Пользователи
+
+ ru
+ Автор заметки
+
@@ -146,6 +154,10 @@
ChartOfAccountsRefCatalogRef
+
+ ru
+ Предмет заметки
+ true
@@ -163,6 +175,10 @@
ValueStorage
+
+ ru
+ Текст заметки
+
@@ -194,6 +210,10 @@
Boolean
+
+ ru
+ Разместить заметку в списке на рабочем столе
+
@@ -212,6 +232,10 @@
EnumRef.ЦветаЗаметок
+
+ ru
+ Цвет значка заметки
+ true
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss
deleted file mode 100644
index 91027f589..000000000
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
- Normal
- dfcece9d-5077-440b-b6b3-45a5cb4538eb
-
-
- Normal
- 88619765-ccb3-46c6-ac52-38e9c992ebd4
-
-
- Normal
- b75fecce-942b-4aed-abc9-e6a02e460fb3
-
-
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl
deleted file mode 100644
index 6a49a2e3e..000000000
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl
+++ /dev/null
@@ -1,71 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
-
-&НаСервере
-Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
-
- // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
- Если ЭтаФорма.Параметры.Свойство("АвтоТест") Тогда
- Возврат;
- КонецЕсли;
-
- Владелец = Неопределено;
-
- Если Параметры.Отбор.Свойство("_Владелец", Владелец)
- И ЗначениеЗаполнено(Владелец) Тогда
-
- Параметры.Отбор.Удалить("_Владелец");
- Параметры.Отбор.Вставить("Владелец", Владелец);
-
- ИначеЕсли Параметры.Отбор.Свойство("Владелец")
- И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда
-
- Владелец = Параметры.Отбор.Владелец;
- КонецЕсли;
-
- Если Владелец = Неопределено Тогда
- ЗаголовокСтрока = "";
- Иначе
- ЗаголовокСтрока = СтрПолучитьСтроку(Владелец.СклоненияПредмета, 2);
- КонецЕсли;
-
- Если ПустаяСтрока(ЗаголовокСтрока) Тогда
- Заголовок = НСтр("ru = 'Выберите значение'");
- Иначе
- Заголовок = ЗаголовокСтрока;
- КонецЕсли;
-
-КонецПроцедуры
-
-////////////////////////////////////////////////////////////////////////////////
-// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список
-
-&НаКлиенте
-Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
-
- ПроверитьВозможностьВыбора(Элемент, СтандартнаяОбработка);
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
-
- ПроверитьВозможностьВыбора(Элемент, СтандартнаяОбработка);
-
-КонецПроцедуры
-
-////////////////////////////////////////////////////////////////////////////////
-// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-
-&НаКлиенте
-Процедура ПроверитьВозможностьВыбора(Элемент, СтандартнаяОбработка)
-
- Если Элемент.ТекущиеДанные <> Неопределено
- И Элемент.ТекущиеДанные.ЭтоГруппа Тогда
-
- СтандартнаяОбработка = Ложь;
- Предупреждение(НСтр("ru = 'Выбор групп значений не поддерживается.'"));
- КонецЕсли;
-
-КонецПроцедуры
-
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Form.form
deleted file mode 100644
index 203c6189e..000000000
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Form.form
+++ /dev/null
@@ -1,239 +0,0 @@
-
-
-
- Список
- 1
- true
- true
-
- true
-
-
- Список
-
- true
- false
- None
- Copy
- Create
- CreateFolder
-
- Наименование
- 4
- true
- true
-
- true
-
-
- Список.Description
-
- true
-
- НаименованиеРасширеннаяПодсказка
- 16
- Label
- true
- true
-
- Left
-
-
-
- НаименованиеКонтекстноеМеню
- 5
- true
-
- LabelField
- Enter
- true
- Left
- true
-
- true
- true
-
-
- None
-
- СписокКоманднаяПанель
- 3
- 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
-
-
-
- СписокКонтекстноеМеню
- 2
- true
-
- Tree
- true
- true
- true
- true
- true
- true
- MultiRow
- 1
- 1
- AutoUse
- AutoUse
- true
- true
- false
- false
- false
- Auto
- Auto
- ExpandTopLevel
- true
- true
- true
- true
-
- Список.DefaultPicture
-
- None
- None
- None
- true
-
- 60
-
- 0001-01-01T00:00:00
- 0001-01-01T00:00:00
-
- Folders
-
- true
- true
- true
-
-
-
- ФормаКоманднаяПанель
- -1
- Left
- true
-
- Copy
- Create
- CreateFolder
- LockOwner
- true
- true
- true
- Vertical
- true
- true
- true
- UseIfNecessary
- auto
- true
-
- Список
- 1
-
- DynamicList
-
-
- true
-
-
- true
-
- true
-
- Catalog.ЗначенияСвойствОбъектов
- true
- true
- true
- true
-
-
-
-
-
-
-
-
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form
new file mode 100644
index 000000000..117f4bdc0
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form
@@ -0,0 +1,185 @@
+
+
+
+ Наименование
+ 1
+
+ ru
+ Группа
+
+ true
+ true
+
+ true
+
+
+ Объект.Description
+
+
+ ru
+ Группа значений свойства объектов.
+
+
+ НаименованиеРасширеннаяПодсказка
+ 7
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НаименованиеКонтекстноеМеню
+ 2
+ true
+
+ InputField
+ Auto
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ Родитель
+ 5
+ true
+ true
+
+ true
+
+
+ Объект.Parent
+
+
+ ru
+ Вышестоящая группа значений свойства объектов.
+
+
+ РодительРасширеннаяПодсказка
+ 9
+ Label
+ true
+ true
+
+ Left
+
+
+
+ РодительКонтекстноеМеню
+ 6
+ true
+
+ InputField
+ Auto
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ Владелец
+ 3
+ true
+ true
+
+ true
+
+
+ Объект.Owner
+
+
+ ВладелецРасширеннаяПодсказка
+ 11
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ВладелецКонтекстноеМеню
+ 4
+ true
+
+ InputField
+ true
+ Auto
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ ФормаКоманднаяПанель
+ -1
+ Left
+ true
+
+
+ OnCreateAtServer
+ ПриСозданииНаСервере
+
+ LockOwner
+ true
+ true
+ Vertical
+ true
+ true
+ true
+ UseIfNecessary
+ auto
+ true
+
+ Объект
+ 1
+
+ CatalogObject.ЗначенияСвойствОбъектов
+
+
+ true
+
+
+ true
+
+ true
+ true
+
+
+
+
+
+
+
+ AfterWriteAtServer
+ ПослеЗаписиНаСервере
+
+ Folders
+
+
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl
new file mode 100644
index 000000000..d6873dd3f
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl
@@ -0,0 +1,61 @@
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(Объект.Ссылка)
+ И Параметры.ЗначенияЗаполнения.Свойство("Наименование") Тогда
+
+ Объект.Наименование = Параметры.ЗначенияЗаполнения.Наименование;
+ КонецЕсли;
+
+ УстановитьЗаголовок();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
+
+ УстановитьЗаголовок();
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+Процедура УстановитьЗаголовок()
+
+ ИмяСвойства = СокрЛП(СтрПолучитьСтроку(Объект.Владелец.СклоненияПредмета, 1));
+
+ Если НЕ ПустаяСтрока(ИмяСвойства) Тогда
+ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (%2)'"),
+ Объект.Наименование,
+ ИмяСвойства);
+ Иначе
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (Создание)'"), ИмяСвойства);
+ КонецЕсли;
+ Иначе
+ ИмяСвойства = Строка(Объект.Владелец);
+
+ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (Группа значений свойства %2)'"),
+ Объект.Наименование,
+ ИмяСвойства);
+ Иначе
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Группа значений свойства %1 (Создание)'"), ИмяСвойства);
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
index 91027f589..089b27984 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
@@ -5,6 +5,18 @@
dfcece9d-5077-440b-b6b3-45a5cb4538eb
+
+ Владелец
+ Asc
+
+
+ ЭтоПапка
+ Desc
+
+
+ Ссылка
+ Asc
+ Normal88619765-ccb3-46c6-ac52-38e9c992ebd4
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form
index 36fe7b35a..bf598e3af 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form
@@ -1,5 +1,50 @@
+
+ Свойство
+ 6
+ true
+
+ true
+
+
+ Свойство
+
+
+ OnChange
+ СвойствоПриИзменении
+
+
+ СвойствоРасширеннаяПодсказка
+ 31
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СвойствоКонтекстноеМеню
+ 7
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+ Список1
@@ -11,7 +56,6 @@
Список
- truefalseNone
@@ -32,7 +76,7 @@
trueНаименованиеРасширеннаяПодсказка
- 16
+ 43Labeltruetrue
@@ -59,6 +103,41 @@
Normal
+
+ Владелец
+ 8
+ true
+
+ true
+
+
+ Список.Owner
+
+
+ ВладелецРасширеннаяПодсказка
+ 45
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ВладелецКонтекстноеМеню
+ 9
+ true
+
+ LabelField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+
+ NoneСписокКоманднаяПанель
@@ -66,12 +145,16 @@
Lefttrue
+
+ BeforeAddRow
+ СписокПередНачаломДобавления
+ СписокСтрокаПоиска
- 7
+ 34СписокСтрокаПоискаРасширеннаяПодсказка
- 9
+ 36Labeltruetrue
@@ -81,7 +164,7 @@
СписокСтрокаПоискаКонтекстноеМеню
- 8
+ 35trueСписок
@@ -91,10 +174,10 @@
СписокСостояниеПросмотра
- 10
+ 37СписокСостояниеПросмотраРасширеннаяПодсказка
- 12
+ 39Labeltruetrue
@@ -104,7 +187,7 @@
СписокСостояниеПросмотраКонтекстноеМеню
- 11
+ 38trueViewStatusAddition
@@ -115,10 +198,10 @@
СписокУправлениеПоиском
- 13
+ 40СписокУправлениеПоискомРасширеннаяПодсказка
- 15
+ 42Labeltruetrue
@@ -128,7 +211,7 @@
СписокУправлениеПоискомКонтекстноеМеню
- 14
+ 41trueSearchControlAddition
@@ -139,7 +222,7 @@
СписокРасширеннаяПодсказка
- 6
+ 33Labeltruetrue
@@ -158,6 +241,7 @@
truetruetrue
+ trueMultiRow11
@@ -169,6 +253,8 @@
Autotruetrue
+ true
+ trueСписок.DefaultPicture
@@ -189,13 +275,204 @@
ФормаКоманднаяПанель-1
+
+ ФормаВыбрать
+ 17
+ true
+ true
+
+ true
+
+ true
+
+ ФормаВыбратьРасширеннаяПодсказка
+ 24
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Choose
+ Auto
+ true
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаСоздать
+ 10
+ true
+ true
+
+ true
+
+
+ ФормаСоздатьРасширеннаяПодсказка
+ 25
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Create
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаСоздатьГруппу
+ 18
+ true
+ true
+
+ true
+
+
+ ФормаСоздатьГруппуРасширеннаяПодсказка
+ 26
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.CreateFolder
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаСкопировать
+ 21
+ true
+ true
+
+ true
+
+
+ ФормаСкопироватьРасширеннаяПодсказка
+ 27
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Copy
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаИзменить
+ 23
+ true
+ true
+
+ true
+
+
+ ФормаИзменитьРасширеннаяПодсказка
+ 28
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Change
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ КомандыФормы
+ 12
+ true
+ true
+
+ true
+
+
+ ru
+ Команды формы
+
+
+ ru
+ Команды формы
+
+
+ КомандыФормыРасширеннаяПодсказка
+ 29
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Form
+
+
+
+ ФормаСправка
+ 13
+ true
+ true
+
+ true
+
+
+ ФормаСправкаРасширеннаяПодсказка
+ 30
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Help
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+ Left
- true
+
+ NotificationProcessing
+ ОбработкаОповещения
+ OnCreateAtServerПриСозданииНаСервере
+ 62DontBlocktruetrue
@@ -219,6 +496,18 @@
true
+
+ Список.РодительЭтоПапка
+
+
+ Список.ЭтоПапка
+
+
+ Список.Parent
+
+
+ Список.Ref
+ trueCatalog.ЗначенияСвойствОбъектов
@@ -228,6 +517,40 @@
true
+
+ Свойство
+
+ ru
+ Свойство
+
+ 2
+
+ ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения
+
+
+ true
+
+
+ true
+
+
+
+ ВыборГрупп
+
+ ru
+ Выбор групп
+
+ 4
+
+ Boolean
+
+
+ true
+
+
+ true
+
+
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl
index 5336f2c4c..d3e15303b 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl
@@ -1,18 +1,181 @@
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- Владелец = Неопределено;
- СодержитЗначения = Ложь;
-
- Если Параметры.Отбор.Свойство("Владелец", Владелец) Тогда
- СодержитЗначения = Владелец.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"));
+ // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
КонецЕсли;
- Если Не СодержитЗначения Тогда
- Элементы.Список.ТолькоПросмотр = Истина;
+ Если Параметры.Отбор.Свойство("_Владелец", Свойство)
+ И ЗначениеЗаполнено(Свойство) Тогда
+
+ Параметры.Отбор.Удалить("_Владелец");
+ Параметры.Отбор.Вставить("Владелец", Свойство);
+
+ ИначеЕсли Параметры.Отбор.Свойство("Владелец")
+ И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда
+
+ Свойство = Параметры.Отбор.Владелец;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(Свойство) Тогда
+ Элементы.Свойство.Видимость = Истина;
+ КонецЕсли;
+
+ Если Параметры.РежимВыбора Тогда
+
+ Если Параметры.Свойство("ВыборГруппИЭлементов")
+ И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда
+
+ ВыборГрупп = Истина;
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ЭтоГруппа", Истина);
+ Иначе
+ Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы;
+ КонецЕсли;
+
+ РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
+ Иначе
+ Элементы.Список.РежимВыбора = Ложь;
+ КонецЕсли;
+
+ УстановитьЗаголовок();
+
+ Если ВыборГрупп Тогда
+ Если Элементы.Найти("ФормаСоздать") <> Неопределено Тогда
+ Элементы.ФормаСоздать.Видимость = Ложь;
+ Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь;
+ КонецЕсли;
+ КонецЕсли;
+
+ ПриИзмененииСвойства();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+
+ Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения"
+ И Источник = Свойство Тогда
+
+ ПодключитьОбработчикОжидания("ОбработчикОжиданияПриИзмененииСвойства", 0.1, Истина);
+ КонецЕсли;
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ
+
+&НаКлиенте
+Процедура СвойствоПриИзменении(Элемент)
+
+ ПриИзмененииСвойства();
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список
+
+&НаКлиенте
+Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Если НЕ Копирование
+ И Элементы.Список.Отображение = ОтображениеТаблицы.Список Тогда
+
+ Родитель = Неопределено;
+ КонецЕсли;
+
+ Если ВыборГрупп
+ И НЕ Группа Тогда
+
+ Отказ = Истина;
+ КонецЕсли;
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+&НаСервере
+Процедура УстановитьЗаголовок()
+
+ СтрокаЗаголовка = "";
+
+ Если ЗначениеЗаполнено(Свойство) Тогда
+ СтрокаЗаголовка = СтрПолучитьСтроку(ОбщегоНазначения.ПолучитьЗначениеРеквизита(
+ Свойство, "СклоненияПредмета"), 2);
+ КонецЕсли;
+
+ Если ПустаяСтрока(СтрокаЗаголовка) Тогда
+
+ Если ЗначениеЗаполнено(Свойство) Тогда
+ Если НЕ Параметры.РежимВыбора Тогда
+ СтрокаЗаголовка = НСтр("ru = 'Значения свойства %1'");
+ ИначеЕсли ВыборГрупп Тогда
+ СтрокаЗаголовка = НСтр("ru = 'Выберите группу значений свойства %1'");
+ Иначе
+ СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства %1'");
+ КонецЕсли;
+
+ СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ СтрокаЗаголовка, Строка(Свойство));
+
+ ИначеЕсли Параметры.РежимВыбора Тогда
+
+ Если ВыборГрупп Тогда
+ СтрокаЗаголовка = НСтр("ru = 'Выберите группу значений свойства'");
+ Иначе
+ СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства'");
+ КонецЕсли;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если НЕ ПустаяСтрока(СтрокаЗаголовка) Тогда
+ АвтоЗаголовок = Ложь;
+ Заголовок = СтрокаЗаголовка;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработчикОжиданияПриИзмененииСвойства()
+
+ ПриИзмененииСвойства();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриИзмененииСвойства()
+
+ Если ЗначениеЗаполнено(Свойство) Тогда
+
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
+ Список.Отбор, "Владелец", Свойство);
+
+ ТипЗначения = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Свойство, "ТипЗначения");
+
+ Если ТипЗнч(ТипЗначения) = Тип("ОписаниеТипов")
+ И ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда
+
+ Элементы.Список.ИзменятьСоставСтрок = Истина;
+ Иначе
+ Элементы.Список.ИзменятьСоставСтрок = Ложь;
+ КонецЕсли;
+
+ Элементы.Список.Отображение = ОтображениеТаблицы.ИерархическийСписок;
+ Элементы.Владелец.Видимость = Ложь;
+ Элементы.Список.Шапка = Ложь;
+ Иначе
+ ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(
+ Список.Отбор, "Владелец");
+
+ Элементы.Список.Отображение = ОтображениеТаблицы.Список;
+ Элементы.Список.ИзменятьСоставСтрок = Ложь;
+ Элементы.Владелец.Видимость = Истина;
+ Элементы.Список.Шапка = Истина;
КонецЕсли;
КонецПроцедуры
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form
index 0bcb4ebc9..a78b4b07c 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form
@@ -1,48 +1,7 @@
-
- Владелец
- 3
- true
- true
-
- true
-
-
- Объект.Owner
-
-
- ВладелецРасширеннаяПодсказка
- 10
- Label
- true
- true
-
- Left
-
-
-
- ВладелецКонтекстноеМеню
- 4
- true
-
- InputField
- true
- Enter
- true
- Left
- true
-
- true
- true
- true
- true
- true
- Normal
-
-
- Группа1
+ ГоризонтальнаяГруппа9Наименование
@@ -57,7 +16,7 @@
НаименованиеРасширеннаяПодсказка
- 13
+ 11Labeltruetrue
@@ -97,7 +56,7 @@
ВесРасширеннаяПодсказка
- 15
+ 13Labeltruetrue
@@ -119,7 +78,7 @@
truetruetrue
- true
+ truetruetrueNormal
@@ -130,9 +89,17 @@
true
+
+ ru
+ Горизонтальная группа
+
+
+ ru
+ Горизонтальная группа
+
- Группа1РасширеннаяПодсказка
- 12
+ ГоризонтальнаяГруппаРасширеннаяПодсказка
+ 10Labeltruetrue
@@ -162,7 +129,7 @@
РодительРасширеннаяПодсказка
- 17
+ 15Labeltruetrue
@@ -189,6 +156,47 @@
Normal
+
+ Владелец
+ 3
+ true
+ true
+
+ true
+
+
+ Объект.Owner
+
+
+ ВладелецРасширеннаяПодсказка
+ 17
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ВладелецКонтекстноеМеню
+ 4
+ true
+
+ InputField
+ true
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+ ФормаКоманднаяПанель-1
@@ -199,6 +207,7 @@
OnCreateAtServerПриСозданииНаСервере
+ 50LockOwnertruetrue
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html
deleted file mode 100644
index 6096be4b3..000000000
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html
+++ /dev/null
@@ -1 +0,0 @@
-При формировании списка значений можно указать не только наименование в поле Значение, но и указать Вес значения (числовое поле). Это поле в дальнейшем можно использовать для анализа в отчетах. Логику использования этого поля пользователю необходимо продумывать самостоятельно. Например, для значений свойства Надежность представленных на рисунке можно задать вес следующим образом: для значений от единицы до тройки поставить вес равным нулю, а для значений четыре и пять равным единице. При таких весах в отчет можно быстро вывести надежных клиентов (у которых вес значения больше нуля).
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl
index 4a188c117..1412cb4cb 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl
@@ -1,3 +1,4 @@
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
@@ -9,41 +10,52 @@
Возврат;
КонецЕсли;
- ВладелецЗначенияСвойства = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка();
-
- Если Объект.Ссылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда
- Если Параметры.ЗначениеКопирования = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда
- ВладелецЗначенияСвойства = Параметры.ЗначенияЗаполнения.Владелец;
- Иначе
- ВладелецЗначенияСвойства = Параметры.ЗначениеКопирования.Владелец;
- КонецЕсли;
- Иначе
- ВладелецЗначенияСвойства = Объект.Ссылка.Владелец;
+ Если НЕ ЗначениеЗаполнено(Объект.Ссылка)
+ И Параметры.ЗначенияЗаполнения.Свойство("Наименование") Тогда
+
+ Объект.Наименование = Параметры.ЗначенияЗаполнения.Наименование;
КонецЕсли;
- ИмяСвойства = СокрЛП(СтрПолучитьСтроку(ВладелецЗначенияСвойства.СклоненияПредмета, 1));
-
- Если ПустаяСтрока(ИмяСвойства) Тогда
- ИмяСвойства = ВладелецЗначенияСвойства.Наименование;
- КонецЕсли;
-
- Если Объект.Ссылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда // Создание нового.
- Заголовок = ИмяСвойства + " (" + НСтр("ru = 'создание'") + ")";
- Иначе
- Заголовок = Объект.Наименование + " (" + ИмяСвойства + ")";
- КонецЕсли;
+ УстановитьЗаголовок();
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
+ УстановитьЗаголовок();
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+Процедура УстановитьЗаголовок()
+
ИмяСвойства = СокрЛП(СтрПолучитьСтроку(Объект.Владелец.СклоненияПредмета, 1));
- Если ПустаяСтрока(ИмяСвойства) Тогда
- ИмяСвойства = Объект.Владелец.Наименование;
+ Если НЕ ПустаяСтрока(ИмяСвойства) Тогда
+ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (%2)'"),
+ Объект.Наименование,
+ ИмяСвойства);
+ Иначе
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (Создание)'"), ИмяСвойства);
+ КонецЕсли;
+ Иначе
+ ИмяСвойства = Строка(Объект.Владелец);
+
+ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (Значение свойства %2)'"),
+ Объект.Наименование,
+ ИмяСвойства);
+ Иначе
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства);
+ КонецЕсли;
КонецЕсли;
-
- Заголовок = Объект.Наименование + " (" + ИмяСвойства + ")";
КонецПроцедуры
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html
index 5185315de..ed971b8ff 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html
@@ -1,3 +1,4 @@
-
-
При этом для каждого дополнительного реквизита или сведения список значений будет свой. Если список значений большой, то может быть удобно создать группы и разнести значения по ним.
\ No newline at end of file
+
+
В списке Значения свойств объектов задаются значения дополнительных реквизитов и сведений. При этом для каждого дополнительного реквизита или сведения список значений будет свой. Если список значений большой, то может быть удобно создать группы и разнести значения по ним.
+
При формировании списка значений можно указать не только наименование в поле Значение, но и указать Вес значения (числовое поле). Это поле в дальнейшем можно использовать для анализа в отчетах. Логику использования этого поля пользователю необходимо продумывать самостоятельно. Например, для значений свойства Надежность можно задать вес следующим образом: для значений от единицы до тройки поставить вес равным нулю, а для значений четыре и пять равным единице. При таких весах в отчет можно быстро вывести надежных клиентов (у которых вес значения больше нуля).
+
\ No newline at end of file
diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl
similarity index 100%
rename from SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ObjectModule.bsl
rename to SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo
index 27fd9e833..9214f9217 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo
@@ -12,7 +12,6 @@
ruЗначения свойств объектов
- trueCatalog.ЗначенияСвойствОбъектов.StandardAttribute.DescriptionDontUse
@@ -64,7 +63,7 @@
ru
- Дополнительный реквизит или сведение, к которому относится данное значение
+ Дополнительный реквизит или дополнительное сведение.true
@@ -80,11 +79,11 @@
Parentru
- Группа
+ Родительru
- Группа, к которой относится значение свойства
+ Группа значений свойства объектов.true
@@ -107,7 +106,7 @@
ru
- Значение свойства
+ Значение свойства объектов.ShowError
@@ -133,7 +132,7 @@
Useru
- Значение свойства объекта
+ Значение свойства объектовtrue2
@@ -145,10 +144,10 @@
InDialogBothWaysCatalog.ЗначенияСвойствОбъектов.Form.ФормаЭлемента
- Catalog.ЗначенияСвойствОбъектов.Form.ФормаЭлемента
+ Catalog.ЗначенияСвойствОбъектов.Form.ФормаГруппыCatalog.ЗначенияСвойствОбъектов.Form.ФормаСписка
- Catalog.ЗначенияСвойствОбъектов.Form.ФормаВыбора
- Catalog.ЗначенияСвойствОбъектов.Form.ФормаВыбораГруппы
+ Catalog.ЗначенияСвойствОбъектов.Form.ФормаСписка
+ Catalog.ЗначенияСвойствОбъектов.Form.ФормаСпискаВес
@@ -168,29 +167,31 @@
-
+
+ 0
+ UseUse
+
+ ФормаЭлемента
+
+ ru
+ Форма элемента
+
+ PersonalComputer
+ MobileDevice
+
+
+ ФормаГруппы
+
+ ru
+ Форма группы
+
+ PersonalComputer
+ MobileDevice
+
- ФормаВыбора
-
- ru
- Форма выбора
-
- PersonalComputer
- MobileDevice
-
-
- ФормаВыбораГруппы
-
- ru
- Форма выбора группы
-
- PersonalComputer
- MobileDevice
-
- ФормаСпискаru
@@ -199,18 +200,4 @@
PersonalComputerMobileDevice
-
- ФормаЭлемента
-
- ru
- Форма элемента
-
-
-
- ru
-
-
- PersonalComputer
- MobileDevice
-
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
similarity index 76%
rename from SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss
rename to SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
index 784796455..089b27984 100644
--- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
@@ -1,15 +1,22 @@
-
- ЭтоГруппа
- Equal
- true
- Normaldfcece9d-5077-440b-b6b3-45a5cb4538eb
+
+ Владелец
+ Asc
+
+
+ ЭтоПапка
+ Desc
+
+
+ Ссылка
+ Asc
+ Normal88619765-ccb3-46c6-ac52-38e9c992ebd4
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form
new file mode 100644
index 000000000..ca87c1bf3
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form
@@ -0,0 +1,516 @@
+
+
+
+ Свойство
+ 6
+ true
+
+ true
+
+
+ Свойство
+
+
+ OnChange
+ СвойствоПриИзменении
+
+
+ СвойствоРасширеннаяПодсказка
+ 30
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СвойствоКонтекстноеМеню
+ 7
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ Список
+ 1
+ true
+ true
+
+ true
+
+
+ Список
+
+ false
+ None
+
+ Наименование
+ 4
+
+ ru
+ Значение
+
+ true
+ true
+
+ true
+
+
+ Список.Description
+
+ true
+
+ НаименованиеРасширеннаяПодсказка
+ 42
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НаименованиеКонтекстноеМеню
+ 5
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ Владелец
+ 8
+ true
+
+ true
+
+
+ Список.Owner
+
+
+ ВладелецРасширеннаяПодсказка
+ 44
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ВладелецКонтекстноеМеню
+ 9
+ true
+
+ LabelField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+
+
+ None
+
+ СписокКоманднаяПанель
+ 3
+ Left
+ true
+
+
+ BeforeAddRow
+ СписокПередНачаломДобавления
+
+
+ СписокСтрокаПоиска
+ 33
+
+ СписокСтрокаПоискаРасширеннаяПодсказка
+ 35
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокСтрокаПоискаКонтекстноеМеню
+ 34
+ true
+
+ Список
+
+ true
+
+
+
+ СписокСостояниеПросмотра
+ 36
+
+ СписокСостояниеПросмотраРасширеннаяПодсказка
+ 38
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокСостояниеПросмотраКонтекстноеМеню
+ 37
+ true
+
+ ViewStatusAddition
+ Список
+
+ true
+
+
+
+ СписокУправлениеПоиском
+ 39
+
+ СписокУправлениеПоискомРасширеннаяПодсказка
+ 41
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокУправлениеПоискомКонтекстноеМеню
+ 40
+ true
+
+ SearchControlAddition
+ Список
+
+ true
+
+
+
+ СписокРасширеннаяПодсказка
+ 32
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокКонтекстноеМеню
+ 2
+ true
+
+ HierarchicalList
+ true
+ true
+ true
+ true
+ true
+ true
+ MultiRow
+ 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
+
+
+
+ ФормаКоманднаяПанель
+ -1
+
+ ФормаВыбрать
+ 17
+ true
+ true
+
+ true
+
+ true
+
+ ФормаВыбратьРасширеннаяПодсказка
+ 24
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Choose
+ Auto
+ true
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаСоздать
+ 10
+ true
+ true
+
+ true
+
+
+ ФормаСоздатьРасширеннаяПодсказка
+ 25
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Create
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаСкопировать
+ 21
+ true
+ true
+
+ true
+
+
+ ФормаСкопироватьРасширеннаяПодсказка
+ 26
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Copy
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаИзменить
+ 23
+ true
+ true
+
+ true
+
+
+ ФормаИзменитьРасширеннаяПодсказка
+ 27
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Change
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ КомандыФормы
+ 12
+ true
+ true
+
+ true
+
+
+ ru
+ Команды формы
+
+
+ ru
+ Команды формы
+
+
+ КомандыФормыРасширеннаяПодсказка
+ 28
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Form
+
+
+
+ ФормаСправка
+ 13
+ true
+ true
+
+ true
+
+
+ ФормаСправкаРасширеннаяПодсказка
+ 29
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.StandardCommand.Help
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+ Left
+
+
+ NotificationProcessing
+ ОбработкаОповещения
+
+
+ OnCreateAtServer
+ ПриСозданииНаСервере
+
+ 62
+ DontBlock
+ true
+ true
+ true
+ Vertical
+ true
+ true
+ true
+ UseIfNecessary
+ auto
+ true
+
+ Список
+ 1
+
+ DynamicList
+
+
+ true
+
+
+ true
+
+
+ Список.РодительЭтоПапка
+
+
+ Список.ЭтоПапка
+
+
+ Список.Parent
+
+
+ Список.Ref
+
+ true
+
+ Catalog.ЗначенияСвойствОбъектовИерархия
+ true
+ true
+ true
+ true
+
+
+
+ Свойство
+
+ ru
+ Свойство
+
+ 2
+
+ ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения
+
+
+ true
+
+
+ true
+
+
+
+
+
+
+
+
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl
new file mode 100644
index 000000000..d1b17c3b7
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl
@@ -0,0 +1,151 @@
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если Параметры.Отбор.Свойство("_Владелец", Свойство)
+ И ЗначениеЗаполнено(Свойство) Тогда
+
+ Параметры.Отбор.Удалить("_Владелец");
+ Параметры.Отбор.Вставить("Владелец", Свойство);
+
+ ИначеЕсли Параметры.Отбор.Свойство("Владелец")
+ И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда
+
+ Свойство = Параметры.Отбор.Владелец;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(Свойство) Тогда
+ Элементы.Свойство.Видимость = Истина;
+ КонецЕсли;
+
+ Если Параметры.РежимВыбора Тогда
+ РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
+ Иначе
+ Элементы.Список.РежимВыбора = Ложь;
+ КонецЕсли;
+
+ УстановитьЗаголовок();
+
+ ПриИзмененииСвойства();
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+
+ Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения"
+ И Источник = Свойство Тогда
+
+ ПодключитьОбработчикОжидания("ОбработчикОжиданияПриИзмененииСвойства", 0.1, Истина);
+ КонецЕсли;
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ
+
+&НаКлиенте
+Процедура СвойствоПриИзменении(Элемент)
+
+ ПриИзмененииСвойства();
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список
+
+&НаКлиенте
+Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+
+ Если НЕ Копирование
+ И Элементы.Список.Отображение = ОтображениеТаблицы.Список Тогда
+
+ Родитель = Неопределено;
+ КонецЕсли;
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+&НаСервере
+Процедура УстановитьЗаголовок()
+
+ СтрокаЗаголовка = "";
+
+ Если ЗначениеЗаполнено(Свойство) Тогда
+ СтрокаЗаголовка = СтрПолучитьСтроку(ОбщегоНазначения.ПолучитьЗначениеРеквизита(
+ Свойство, "СклоненияПредмета"), 2);
+ КонецЕсли;
+
+ Если ПустаяСтрока(СтрокаЗаголовка) Тогда
+
+ Если ЗначениеЗаполнено(Свойство) Тогда
+ Если НЕ Параметры.РежимВыбора Тогда
+ СтрокаЗаголовка = НСтр("ru = 'Значения свойства %1'");
+ Иначе
+ СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства %1'");
+ КонецЕсли;
+
+ СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ СтрокаЗаголовка, Строка(Свойство));
+
+ ИначеЕсли Параметры.РежимВыбора Тогда
+ СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства'");
+ КонецЕсли;
+ КонецЕсли;
+
+ Если НЕ ПустаяСтрока(СтрокаЗаголовка) Тогда
+ АвтоЗаголовок = Ложь;
+ Заголовок = СтрокаЗаголовка;
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработчикОжиданияПриИзмененииСвойства()
+
+ ПриИзмененииСвойства();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриИзмененииСвойства()
+
+ Если ЗначениеЗаполнено(Свойство) Тогда
+
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
+ Список.Отбор, "Владелец", Свойство);
+
+ ТипЗначения = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Свойство, "ТипЗначения");
+
+ Если ТипЗнч(ТипЗначения) = Тип("ОписаниеТипов")
+ И ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда
+
+ Элементы.Список.ИзменятьСоставСтрок = Истина;
+ Иначе
+ Элементы.Список.ИзменятьСоставСтрок = Ложь;
+ КонецЕсли;
+
+ Элементы.Список.Отображение = ОтображениеТаблицы.ИерархическийСписок;
+ Элементы.Владелец.Видимость = Ложь;
+ Элементы.Список.Шапка = Ложь;
+ Иначе
+ ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(
+ Список.Отбор, "Владелец");
+
+ Элементы.Список.Отображение = ОтображениеТаблицы.Список;
+ Элементы.Список.ИзменятьСоставСтрок = Ложь;
+ Элементы.Владелец.Видимость = Истина;
+ Элементы.Список.Шапка = Истина;
+ КонецЕсли;
+
+КонецПроцедуры
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form
new file mode 100644
index 000000000..7a9a44526
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form
@@ -0,0 +1,246 @@
+
+
+
+ ГоризонтальнаяГруппа
+ 9
+
+ Наименование
+ 1
+ true
+ true
+
+ true
+
+
+ Объект.Description
+
+
+ НаименованиеРасширеннаяПодсказка
+ 11
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НаименованиеКонтекстноеМеню
+ 2
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ Вес
+ 7
+ true
+ true
+
+ true
+
+
+ Объект.Вес
+
+
+ ВесРасширеннаяПодсказка
+ 13
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ВесКонтекстноеМеню
+ 8
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Горизонтальная группа
+
+
+ ru
+ Горизонтальная группа
+
+
+ ГоризонтальнаяГруппаРасширеннаяПодсказка
+ 10
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualGroup
+
+ Auto
+ true
+ true
+ Auto
+ Auto
+
+
+
+ Родитель
+ 5
+ true
+ true
+
+ true
+
+
+ Объект.Parent
+
+
+ РодительРасширеннаяПодсказка
+ 15
+ Label
+ true
+ true
+
+ Left
+
+
+
+ РодительКонтекстноеМеню
+ 6
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ Владелец
+ 3
+ true
+ true
+
+ true
+
+
+ Объект.Owner
+
+
+ ВладелецРасширеннаяПодсказка
+ 17
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ВладелецКонтекстноеМеню
+ 4
+ true
+
+ InputField
+ true
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+
+
+ ФормаКоманднаяПанель
+ -1
+ Left
+ true
+
+
+ OnCreateAtServer
+ ПриСозданииНаСервере
+
+ 50
+ LockOwner
+ true
+ true
+ Vertical
+ true
+ true
+ true
+ UseIfNecessary
+ auto
+ true
+
+ Объект
+ 1
+
+ CatalogObject.ЗначенияСвойствОбъектовИерархия
+
+
+ true
+
+
+ true
+
+ true
+ true
+
+
+
+
+
+
+
+ AfterWriteAtServer
+ ПослеЗаписиНаСервере
+
+
+
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl
new file mode 100644
index 000000000..1412cb4cb
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl
@@ -0,0 +1,61 @@
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(Объект.Ссылка)
+ И Параметры.ЗначенияЗаполнения.Свойство("Наименование") Тогда
+
+ Объект.Наименование = Параметры.ЗначенияЗаполнения.Наименование;
+ КонецЕсли;
+
+ УстановитьЗаголовок();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
+
+ УстановитьЗаголовок();
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+Процедура УстановитьЗаголовок()
+
+ ИмяСвойства = СокрЛП(СтрПолучитьСтроку(Объект.Владелец.СклоненияПредмета, 1));
+
+ Если НЕ ПустаяСтрока(ИмяСвойства) Тогда
+ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (%2)'"),
+ Объект.Наименование,
+ ИмяСвойства);
+ Иначе
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (Создание)'"), ИмяСвойства);
+ КонецЕсли;
+ Иначе
+ ИмяСвойства = Строка(Объект.Владелец);
+
+ Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = '%1 (Значение свойства %2)'"),
+ Объект.Наименование,
+ ИмяСвойства);
+ Иначе
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства);
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html
new file mode 100644
index 000000000..1c3caba7e
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html
@@ -0,0 +1,4 @@
+
+
В списке Значения свойств объектов (иерархия) задаются значения дополнительных реквизитов и сведений. При этом для каждого дополнительного реквизита или сведения список значений будет свой. В списке можено использовать иерархию значений.
+
При формировании списка значений можно указать не только наименование в поле Значение, но и указать Вес значения (числовое поле). Это поле в дальнейшем можно использовать для анализа в отчетах. Логику использования этого поля пользователю необходимо продумывать самостоятельно. Например, для значений свойства Надежность можно задать вес следующим образом: для значений от единицы до тройки поставить вес равным нулю, а для значений четыре и пять равным единице. При таких весах в отчет можно быстро вывести надежных клиентов (у которых вес значения больше нуля).
+
\ No newline at end of file
diff --git a/SSL/src/Catalogs/КлассификаторВалют/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl
similarity index 100%
rename from SSL/src/Catalogs/КлассификаторВалют/ManagerModule.bsl
rename to SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl
diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo
new file mode 100644
index 000000000..25f2cfa70
--- /dev/null
+++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+ ЗначенияСвойствОбъектовИерархия
+
+ ru
+ Значения свойств объектов (иерархия)
+
+ Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Description
+ DontUse
+
+ Use
+ PredefinedDataName
+
+ Use
+
+
+
+
+ Use
+ Predefined
+
+ Use
+
+
+
+
+ Use
+ Ref
+
+ Use
+
+
+
+
+ Use
+ DeletionMark
+
+ Use
+
+
+
+
+ Use
+ IsFolder
+
+ Use
+
+
+
+
+ Use
+ Owner
+
+ ru
+ Свойство
+
+
+ ru
+ Дополнительный реквизит или дополнительное сведение.
+
+ true
+
+ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.EmptyRef
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Parent
+
+ ru
+ Родитель
+
+
+ ru
+ Вышестоящее значение свойства объектов.
+
+ true
+
+ Catalog.ЗначенияСвойствОбъектовИерархия.EmptyRef
+
+
+ Отбор.Владелец
+ Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Owner
+
+ Use
+
+
+
+
+ Use
+ Description
+
+ ru
+ Значение
+
+
+ ru
+ Значение свойства объектов.
+
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Code
+
+ Use
+
+
+
+ Use
+
+
+ ru
+
+
+ Managed
+ Use
+
+ ru
+ Значение свойства объектов (иерархия)
+
+ true
+ HierarchyOfItems
+ 2
+ true
+ ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения
+ 100
+ String
+ AsDescription
+ InDialog
+ BothWays
+ Catalog.ЗначенияСвойствОбъектовИерархия.Form.ФормаЭлемента
+ Catalog.ЗначенияСвойствОбъектовИерархия.Form.ФормаСписка
+ Catalog.ЗначенияСвойствОбъектовИерархия.Form.ФормаСписка
+
+ Вес
+
+ ru
+ Вес
+
+
+ Number
+
+ 10
+ 2
+
+
+
+ ru
+ Относительный вес значения (значимость)
+
+
+
+
+ 0
+
+ Use
+ Use
+
+
+ ФормаЭлемента
+
+ ru
+ Форма элемента
+
+ PersonalComputer
+ MobileDevice
+
+
+ ФормаСписка
+
+ ru
+ Форма списка
+
+ PersonalComputer
+ MobileDevice
+
+
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form
deleted file mode 100644
index 08a73b7cb..000000000
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form
+++ /dev/null
@@ -1,230 +0,0 @@
-
-
-
- Список
- 1
- true
- true
-
- true
-
-
- Список
-
- true
- None
-
- Синоним
- 4
- true
- true
-
- true
-
-
- Список.Синоним
-
- true
-
- ru
- Представление объекта метаданных
-
-
- СинонимРасширеннаяПодсказка
- 16
- Label
- true
- true
-
- Left
-
-
-
- СинонимКонтекстноеМеню
- 5
- true
-
- LabelField
- Enter
- true
- Left
- true
-
- true
- true
-
-
- None
-
- СписокКоманднаяПанель
- 3
- 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
-
-
-
- СписокКонтекстноеМеню
- 2
- true
-
- HierarchicalList
- 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
-
-
-
- ФормаКоманднаяПанель
- -1
- Left
- true
-
- LockOwner
- true
- true
- true
- Vertical
- true
- true
- true
- UseIfNecessary
- auto
- true
-
- Список
- 1
-
- DynamicList
-
-
- true
-
-
- true
-
- true
-
- Catalog.ИдентификаторыОбъектовМетаданных
- true
- true
- true
- true
-
-
-
-
-
-
-
-
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
index c53358399..48fc28884 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss
@@ -6,8 +6,8 @@
- Используется
- Asc
+ ПометкаУдаления
+ DescПорядокКоллекции
@@ -26,23 +26,25 @@
-
+
+
+ Синоним
+
+
+ ПолноеИмя
+
+
- Родитель
- Equal
- Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка
-
-
- Предопределенный
+ ПометкаБудущегоУдаленияEqualtrue
- Шрифт
-
+ ЦветТекста
+ web:DarkGray
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form
index f8f09aa61..3ddc0793f 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form
@@ -31,7 +31,7 @@
trueСинонимРасширеннаяПодсказка
- 28
+ 26Labeltruetrue
@@ -65,7 +65,7 @@
ПолноеИмяРасширеннаяПодсказка
- 30
+ 28Labeltruetrue
@@ -88,49 +88,22 @@
true
-
- Используется
- 15
- true
- true
-
-
- Список.Используется
-
-
- ИспользуетсяРасширеннаяПодсказка
- 32
- Label
- true
- true
-
- Left
-
-
-
- ИспользуетсяКонтекстноеМеню
- 16
- true
-
- CheckBoxField
- Enter
- true
- Left
- true
-
- NoneСписокКоманднаяПанель3Left
+
+ ValueChoice
+ СписокВыборЗначения
+ СписокСтрокаПоиска
- 19
+ 17СписокСтрокаПоискаРасширеннаяПодсказка
- 21
+ 19Labeltruetrue
@@ -140,7 +113,7 @@
СписокСтрокаПоискаКонтекстноеМеню
- 20
+ 18trueСписок
@@ -150,10 +123,10 @@
СписокСостояниеПросмотра
- 22
+ 20СписокСостояниеПросмотраРасширеннаяПодсказка
- 24
+ 22Labeltruetrue
@@ -163,7 +136,7 @@
СписокСостояниеПросмотраКонтекстноеМеню
- 23
+ 21trueViewStatusAddition
@@ -174,10 +147,10 @@
СписокУправлениеПоиском
- 25
+ 23СписокУправлениеПоискомРасширеннаяПодсказка
- 27
+ 25Labeltruetrue
@@ -187,7 +160,7 @@
СписокУправлениеПоискомКонтекстноеМеню
- 26
+ 24trueSearchControlAddition
@@ -198,7 +171,7 @@
СписокРасширеннаяПодсказка
- 18
+ 16Labeltruetrue
@@ -218,7 +191,6 @@
truetrueMultiRow
- true11AutoUse
@@ -261,7 +233,7 @@
ОбновитьДанныеСправочникаРасширеннаяПодсказка
- 17
+ 15Labeltruetrue
@@ -280,6 +252,10 @@
Lefttrue
+
+ OnCreateAtServer
+ ПриСозданииНаСервере
+ DontBlocktruetrue
@@ -303,6 +279,9 @@
true
+
+ Список.Используется
+ Список.КоллекцияПорядок
@@ -310,17 +289,57 @@
Список.Description
- Список.Используется
+ Список.Parenttrue
+ ВЫБРАТЬ
+ Идентификаторы.Ссылка,
+ Идентификаторы.ВерсияДанных,
+ Идентификаторы.ПометкаУдаления,
+ ВЫБОР
+ КОГДА ПОДСТРОКА(Идентификаторы.Имя, 0, 7) = "Удалить"
+ ТОГДА ИСТИНА
+ ИНАЧЕ ЛОЖЬ
+ КОНЕЦ КАК ПометкаБудущегоУдаления,
+ Идентификаторы.Предопределенный,
+ Идентификаторы.Родитель,
+ Идентификаторы.Наименование,
+ Идентификаторы.ПорядокКоллекции,
+ Идентификаторы.Имя,
+ Идентификаторы.Синоним,
+ Идентификаторы.ПолноеИмя,
+ Идентификаторы.ПолныйСиноним,
+ Идентификаторы.БезДанных,
+ Идентификаторы.ЗначениеПустойСсылки,
+ Идентификаторы.КлючОбъектаМетаданных
+ИЗ
+ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыCatalog.ИдентификаторыОбъектовМетаданныхtruetrue
+ truetruetrue
+
+ ВыбиратьГруппыОбъектовМетаданных
+
+ ru
+ Выбирать группы объектов метаданных
+
+ 2
+
+ Boolean
+
+
+ true
+
+
+ true
+
+ ОбновитьДанныеСправочника
@@ -343,6 +362,12 @@
AutoAuto
+
+ ВыбиратьГруппыОбъектовМетаданных
+
+ Boolean
+
+
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl
index 46d883bec..1694d0938 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl
@@ -1,3 +1,62 @@
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
+
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда
+ Элементы.ОбновитьДанныеСправочника.Видимость = Ложь;
+ КонецЕсли;
+
+ Если Параметры.РежимВыбора Тогда
+ Элементы.Список.РежимВыбора = Истина;
+ Элементы.ОбновитьДанныеСправочника.ТолькоВоВсехДействиях = Истина;
+ Параметры.Отбор.Вставить("ПометкаУдаления", Ложь);
+ Параметры.Отбор.Вставить("ПометкаБудущегоУдаления", Ложь);
+ КонецЕсли;
+
+ Параметры.Свойство("ВыбиратьГруппыОбъектовМетаданных", ВыбиратьГруппыОбъектовМетаданных);
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список
+
+&НаКлиенте
+Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
+
+ Если НЕ ВыбиратьГруппыОбъектовМетаданных
+ И Элемент.ТекущиеДанные <> Неопределено
+ И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.Родитель) Тогда
+
+ СтандартнаяОбработка = Ложь;
+
+ Если Элемент.Отображение = ОтображениеТаблицы.Дерево Тогда
+ Если Элемент.Развернут(Элемент.ТекущаяСтрока) Тогда
+ Элемент.Свернуть(Элемент.ТекущаяСтрока);
+ Иначе
+ Элемент.Развернуть(Элемент.ТекущаяСтрока);
+ КонецЕсли;
+
+ ИначеЕсли Элемент.Отображение = ОтображениеТаблицы.ИерархическийСписок Тогда
+
+ Если Элемент.ТекущийРодитель <> Элемент.ТекущаяСтрока Тогда
+ Элемент.ТекущийРодитель = Элемент.ТекущаяСтрока;
+ Иначе
+ ТекущаяСтрока = Элемент.ТекущаяСтрока;
+ Элемент.ТекущийРодитель = Неопределено;
+ Элемент.ТекущаяСтрока = ТекущаяСтрока;
+ КонецЕсли;
+ Иначе
+ Предупреждение(НСтр("ru = 'Невозможно выбрать группу объектов метаданных.
+ |Выберите объект метаданных.'"));
+ КонецЕсли;
+ КонецЕсли;
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
&НаКлиенте
Процедура ОбновитьДанныеСправочника(Команда)
@@ -25,6 +84,9 @@
КонецПроцедуры
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
&НаСервере
Процедура ОбновитьДанныеСправочникаНаСервере(ЕстьИзменения, ЕстьУдаленные)
@@ -36,3 +98,5 @@
КонецПроцедуры
+
+
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form
index 922efb0d7..dfb749c49 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form
@@ -13,7 +13,7 @@
НаименованиеРасширеннаяПодсказка
- 29
+ 31Labeltruetrue
@@ -27,6 +27,7 @@
trueInputField
+ trueAutotrueLeft
@@ -57,7 +58,7 @@
ИмяРасширеннаяПодсказка
- 32
+ 34Labeltruetrue
@@ -71,6 +72,7 @@
trueInputField
+ trueEntertrueLeft
@@ -98,7 +100,7 @@
СинонимРасширеннаяПодсказка
- 34
+ 36Labeltruetrue
@@ -112,6 +114,7 @@
trueInputField
+ trueEntertrueLeft
@@ -141,7 +144,7 @@
ИмяИСинонимОбъектаМетаданныхРасширеннаяПодсказка
- 31
+ 33Labeltruetrue
@@ -175,9 +178,13 @@
Объект.ПолноеИмя
+
+ OnChange
+ ПолноеИмяПриИзменении
+ ПолноеИмяРасширеннаяПодсказка
- 37
+ 39Labeltruetrue
@@ -222,7 +229,7 @@
ПолныйСинонимРасширеннаяПодсказка
- 39
+ 41Labeltruetrue
@@ -236,6 +243,7 @@
trueInputField
+ trueAutotrueLeft
@@ -265,7 +273,7 @@
ПолноеИмяИПолныйСинонимОбъектаМетаданныхРасширеннаяПодсказка
- 36
+ 38Labeltruetrue
@@ -299,7 +307,7 @@
ПорядокКоллекцииРасширеннаяПодсказка
- 42
+ 44Labeltruetrue
@@ -313,6 +321,7 @@
trueInputField
+ trueEntertrueLeft
@@ -341,7 +350,7 @@
RightБезДанныхРасширеннаяПодсказка
- 44
+ 46Labeltruetrue
@@ -355,6 +364,7 @@
trueCheckBoxField
+ trueEntertrueLeft
@@ -380,7 +390,7 @@
ПустаяСсылкаПредставлениеРасширеннаяПодсказка
- 46
+ 48Labeltruetrue
@@ -409,53 +419,6 @@
Normal
-
- ИмяПредопределенного
- 27
- true
- true
-
- true
-
-
- ИмяПредопределенного
-
-
- ru
- Если идентификатор объекта метаданных задан через предопределенный элемент, тогда доступно его имя
-Формат имени: полное имя у которого вместо символа "." используется символ "_"
-
-
- ИмяПредопределенногоРасширеннаяПодсказка
- 48
- Label
- true
- true
-
- Left
-
-
-
- ИмяПредопределенногоКонтекстноеМеню
- 28
- true
-
- InputField
- true
- Enter
- true
- Left
- true
-
- true
- true
- true
- true
- true
- true
- Normal
-
- truetrue
@@ -469,9 +432,10 @@
ruПрочие свойства
+ trueПрочиеСвойстваРасширеннаяПодсказка
- 41
+ 43Labeltruetrue
@@ -494,6 +458,33 @@
ФормаКоманднаяПанель-1
+
+ ФормаВключитьВозможностьРедактирования
+ 29
+ true
+ true
+
+ true
+
+
+ ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка
+ 30
+ Label
+ true
+ true
+
+ Left
+
+
+ Form.Command.ВключитьВозможностьРедактирования
+ Normal
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+ InAdditionalSubmenu
+ Lefttrue
@@ -546,24 +537,28 @@
true
-
- ИмяПредопределенного
+
+ ВключитьВозможностьРедактированияru
- Имя предопределенного
+ Включить возможность редактирования
- 3
-
- String
-
-
-
+ 1
+
+ ru
+ Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма)
+
+ true
-
-
- true
-
-
+
+
+
+ ВключитьВозможностьРедактирования
+
+
+ Auto
+ Auto
+
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl
index a8385f3d3..45a2dc579 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl
@@ -1,3 +1,5 @@
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
@@ -6,8 +8,39 @@
ПустаяСсылкаПредставление = Строка(ТипЗнч(Объект.ЗначениеПустойСсылки));
- Если Объект.Предопределенный Тогда
- ИмяПредопределенного = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьИмяПредопределенного(Объект.Ссылка);
+ Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина)
+ ИЛИ Справочники.ИдентификаторыОбъектовМетаданных.ЗапрещеноИзменятьПолноеИмя(Объект) Тогда
+
+ Элементы.ФормаВключитьВозможностьРедактирования.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
+
+&НаКлиенте
+Процедура ВключитьВозможностьРедактирования(Команда)
+
+ ТолькоПросмотр = Ложь;
+ Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПолноеИмяПриИзменении(Элемент)
+
+ ОбновитьСвойстваИдентификатора();
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+&НаСервере
+Процедура ОбновитьСвойстваИдентификатора()
+
+ Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьСвойстваИдентификатора(Объект);
+
+КонецПроцедуры
+
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl
index adde5cfd1..e023a1dcc 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl
@@ -1,18 +1,19 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
// Процедура обновляет данные справочника по метаданным конфигурации.
-// При работе процедуры может быть вызван обработчик события
-// ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных().
//
// Параметры:
-// ЕстьИзменения - Булево, в этот параметр возвращается значение Истина,
-// если производилась запись, иначе не изменяется.
-// ЕстьУдаленные - Булево, в этот параметр возвращается значение Истина,
-// если хотя бы один элемент справочника был помечен на удаление,
-// иначе не изменяется.
+// ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается
+// значение Истина, если производилась запись, иначе не изменяется.
//
-Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Истина, ЕстьУдаленные = Истина) Экспорт
+// ЕстьУдаленные - Булево (возвращаемое значение) - в этот параметр возвращается
+// значение Истина, если хотя бы один элемент справочника был помечен
+// на удаление, иначе не изменяется.
+//
+Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Ложь, ЕстьУдаленные = Ложь) Экспорт
УстановитьПривилегированныйРежим(Истина);
@@ -20,23 +21,17 @@
СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных);
СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных");
- СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя");
+ // Найден - состояние, когда для объекта метаданных найден идентификатор.
+ СвойстваОбъектовМетаданных.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево"));
- // Обработана - состояние, когда идентификатор соотвествует объекту метаданных и
- // был проверен и обновлен, если его свойства изменились
- СвойстваОбъектовМетаданных.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево"));
-
- // Изменение - состояние, когда Обработана = Истина и свойства идентификатора были изменены
- СвойстваОбъектовМетаданных.Колонки.Добавить("Изменение", Новый ОписаниеТипов("Булево"));
-
- // ИзменениеСЗаменой - состояние, когда Изменение = Истина, причем был найден хотя бы один
- // идентификатор с тем же ключом, и выполнялась процедура замены ссылки в информационной базе
- // на новый идентификатор
- СвойстваОбъектовМетаданных.Колонки.Добавить("ИзменениеСЗаменой", Новый ОписаниеТипов("Булево"));
-
- // ПараметрОбработчикаСобытияИзменение - структура свойств, заполняемая
- // при изменении свойств идентификатора
- СвойстваОбъектовМетаданных.Колонки.Добавить("ПараметрОбработчикаСобытияИзменение");
+ // Порядок обновления:
+ // 1. Переименование объектов метаданных (с учетом нижестоящих подсистем).
+ // 2. Обновление предопределенных идентификаторов (коллекций объектов метаданных).
+ // 3. Обновление идентификаторов объектов метаданных, которые имеют ключ объекта метаданных.
+ // 4. Обновление идентификаторов объектов метаданных, которые не имеют ключа объекта метаданных.
+ // 5. В процессе 3 и 4 пометка удаления дублей идентификаторов (по полным именам).
+ // 6. Добавление новых идентификаторов объектов метаданных.
+ // 7. Обновление родителей идентификаторов объектов метаданных и запись обновленных.
НачатьТранзакцию();
Попытка
@@ -61,318 +56,209 @@
| Идентификаторы.ПолныйСиноним,
| Идентификаторы.БезДанных,
| Идентификаторы.ЗначениеПустойСсылки,
- | Идентификаторы.КлючОбъектаМетаданных,
- | Идентификаторы.Используется
+ | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча
|ИЗ
- | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
- |
- |УПОРЯДОЧИТЬ ПО
- | Предопределенный УБЫВ";
- Выборка = Запрос.Выполнить().Выбрать();
+ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы";
+ Выгрузка = Запрос.Выполнить().Выгрузить();
+ Выгрузка.Колонки.Добавить("КлючОбъектаМетаданных");
+ Выгрузка.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево"));
+ Выгрузка.Колонки.Добавить("ЭтоНовый", Новый ОписаниеТипов("Булево"));
+ Выгрузка.Колонки.Добавить("Обновлен", Новый ОписаниеТипов("Булево"));
- Пока Выборка.Следующий() Цикл
- // Проверка и обновление свойств идентификаторов коллекций
- СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(Выборка.Ссылка, "ИдентификаторКоллекции");
- Если СвойстваКоллекции <> Неопределено Тогда
- ПроверитьОбновитьСвойстваКоллекции(Выборка, СвойстваКоллекции, ЕстьИзменения);
- Продолжить;
- КонецЕсли;
- // Предопределенные элементы имеют приоритет, поэтому обрабатываются в первую очередь
- КлючОбъектаМетаданных = Выборка.КлючОбъектаМетаданных.Получить();
- Если Выборка.Предопределенный Тогда
- ПолноеИмя = "";
- ОбъектМетаданных = НайтиОбъектМетаданныхПредопределенного(Выборка.Ссылка, ПолноеИмя);
- Если ОбъектМетаданных = Неопределено Тогда
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'В справочнике Идентификаторы объектов метаданных
- |для предопределенного элемента
- |""%1"",
- |не найден объект метаданных
- |""%2"".
- |
- |Следует задать имя предопределенного элемента,
- |соответствующее существующему объекту метаданных.'"),
- ПолучитьИмяПредопределенного(Выборка.Ссылка),
- ПолноеИмя);
- КонецЕсли;
- // Проверка, что предопределенный элемент относится к коллекции объектов метаданных,
- // для которых существует КлючОбъектаМетаданных
- ИмяКоллецииВЕдЧисле = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".")[0];
- ОписаниеКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяКоллецииВЕдЧисле, "ИмяВЕдЧисле");
- Если ОписаниеКоллекции.БезКлючаОбъектаМетаданных Тогда
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'В справочнике Идентификаторы объектов метаданных
- |для предопределенного элемента
- |""%1"",
- |найден объект метаданных
- |""%2"".
- |
- |Но предопределенные элементы не используются для
- |объектов метаданных типа ""%3"".
- |
- |Следуется удалить предопределенный элемент.'"),
- ПолучитьИмяПредопределенного(Выборка.Ссылка),
- ПолноеИмя,
- ИмяКоллецииВЕдЧисле);
+ // Упорядочение иденитификаторов перед обработкой.
+ Для каждого Строка Из Выгрузка Цикл
+ Строка.КлючОбъектаМетаданных = Строка.ХранилищеКлюча.Получить();
+
+ Строка.БезКлючаОбъектаМетаданных = Строка.КлючОбъектаМетаданных = Неопределено
+ ИЛИ Строка.КлючОбъектаМетаданных = Тип("Неопределено");
+ КонецЦикла;
+ Выгрузка.Сортировать("Предопределенный УБЫВ,
+ |ПометкаУдаления ВОЗР,
+ |БезКлючаОбъектаМетаданных ВОЗР");
+ Выгрузка.Индексы.Добавить("ПолноеИмя");
+
+ // Переименование полных имен перед обработкой.
+ ТаблицаПереименования = ТаблицаПереименованияДляТекущейВерсии(СвойстваКоллекцийОбъектовМетаданных);
+
+ Для каждого ОписаниеПереименования Из ТаблицаПереименования Цикл
+ ДлинаСтарогоПолногоИмени = СтрДлина(ОписаниеПереименования.СтароеПолноеИмя);
+
+ Для каждого Строка Из Выгрузка Цикл
+
+ Если Строка.Предопределенный Тогда
+ Продолжить;
КонецЕсли;
- Если КлючОбъектаМетаданных <> Неопределено
- И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда
- // Если ключ объекта метаданных задан, тогда нужно проверить,
- // совпадают ли элементы, найденные по полному имени и по ключу
- ОбъектМетаданныхПоКлючу = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных);
- Если ОбъектМетаданных <> ОбъектМетаданныхПоКлючу Тогда
- // Если для предопределеного элемента уже задан ключ объекта метаданных,
- // но не совпадает с именем, заданным в предопределенном элементе, значит
- // объект был переименован на другой существующий объект метаданных
- Если ОбъектМетаданныхПоКлючу = Неопределено Тогда
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'В справочнике Идентификаторы объектов метаданных
- |для предопределенного элемента
- |""%1"",
- |задан ключ другого удаленного объекта метаданных.
- |
- |При переименовании предопределенного элемента допущена ошибка:
- |элемент был переименован на существующий объект метаданных
- |""%2"".
- |
- |Повторное использование предопределенного элемента
- |для других объектов метаданных недопустимо.
- |
- |Следует удалить предопределенный элемент удаленного объекта
- |метаданных и создать новый элемент для объекта метаданных
- |""%2"".'"),
- ПолучитьИмяПредопределенного(Выборка.Ссылка),
- ПолноеИмя);
- Иначе
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'В справочнике Идентификаторы объектов метаданных
- |для предопределенного элемента
- |""%1"",
- |задан ключ другого объекта метаданных
- |""%2"".
- |
- |При переименовании предопределенного элемента допущена ошибка:
- |элемент был переименован на существующий объект метаданных
- |""%3"".
- |
- |Повторное использование предопределенного элемента
- |для других объектов метаданных недопустимо.
- |
- |Требуется задать корректное имя
- |""%4""
- |предопределенного элемента
- |""%1"",
- |соответствующее объекту метаданных
- |""%2"".'"),
- ПолучитьИмяПредопределенного(Выборка.Ссылка),
- ОбъектМетаданныхПоКлючу.ПолноеИмя(),
- ПолноеИмя,
- СтрЗаменить(ОбъектМетаданныхПоКлючу.ПолноеИмя(), ".", "_"));
- КонецЕсли;
- КонецЕсли;
+ Если ВРег(Лев(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени))
+ = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда
+
+ Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя
+ + Сред(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени + 1);
КонецЕсли;
+ КонецЦикла;
+ КонецЦикла;
+
+ // Обработка идентификаторов объектов метаданных.
+ Для каждого Свойства Из Выгрузка Цикл
+
+ // Проверка и обновление свойств идентификаторов коллекций объектов метаданных.
+ СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(
+ Свойства.Ссылка, "ИдентификаторКоллекции");
+
+ Если СвойстваКоллекции <> Неопределено Тогда
+ ПроверитьОбновитьСвойстваКоллекции(Свойства, СвойстваКоллекции, ЕстьИзменения);
+ Продолжить;
КонецЕсли;
- // Ключ объекта метаданных может быть незаполнен для предопределенных элементов,
- // а может быть равен Тип("Неопределено") для объектов метаданных без ключа, по которому
- // можно найти ОбъектМетаданных
- Если КлючОбъектаМетаданных = Неопределено
- ИЛИ КлючОбъектаМетаданных = Тип("Неопределено") Тогда
- // Если объект метаданных без ключа, то его можно найти
- // через имя предопределенного или через предустановленный идентификатор
- Если Выборка.Предопределенный Тогда
- ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
- Иначе
- СвойстваОбъектаМетаданных = СвойстваОбъектовМетаданных.Найти(Выборка.Ссылка, "Идентификатор");
- Если СвойстваОбъектаМетаданных = Неопределено Тогда
- ОбъектМетаданных = Неопределено;
- Иначе
- ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(СвойстваОбъектаМетаданных.ПолноеИмя);
- КонецЕсли;
- КонецЕсли;
+ Если Свойства.Предопределенный Тогда
+ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'В справочнике ""Идентификаторы объектов метаданных""
+ |для предопределенного элемента
+ |с именем ""%1""
+ |и представлением ""%2""
+ |не найдено типа объектов метаданных.
+ |
+ |Следует удалить предопределенный элемент.'"),
+ ПолучитьИмяПредопределенного(Свойства.Ссылка),
+ Строка(Свойства.Ссылка));
+ КонецЕсли;
+
+ КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных;
+ ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных);
+
+ Если ОбъектМетаданных = Неопределено Тогда
+ // Если объект метаданных без ключа, то его можно найти только по полному имени.
+ ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя);
Иначе
- ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных);
+ // Если объект метаданных удалялся с целью реструктуризации, тогда
+ // старый идентификатор нужно использовать для нового объекта метаданных,
+ // а для старых объектов метаданных создать новые идентификаторы.
+ Если ВРег(Лев(ОбъектМетаданных.Имя, СтрДлина("Удалить"))) = ВРег("Удалить")
+ И ВРег(Лев(Свойства.Имя, СтрДлина("Удалить"))) <> ВРег("Удалить") Тогда
+
+ НовыйОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя);
+ Если НовыйОбъектМетаданных <> Неопределено Тогда
+ ОбъектМетаданных = НовыйОбъектМетаданных;
+ КлючОбъектаМетаданных = Неопределено; // Чтобы выполнить обновление идентификатора.
+ КонецЕсли;
+ КонецЕсли;
КонецЕсли;
- // Если объект метаданных найден по ключу или имени предопределенного,
- // тогда нужно подготовить строку свойств объекта метаданных
+ // Если объект метаданных найден по ключу или полному имени,
+ // тогда нужно подготовить строку свойств объекта метаданных.
Если ОбъектМетаданных <> Неопределено Тогда
- Строка = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя");
- Если ЗначениеЗаполнено(Строка.ПолноеИмяРодителя) Тогда
- // Родитель может быть предустановленным или предопределенным элементом
- СтрокаРодителя = СвойстваОбъектовМетаданных.Найти(Строка.ПолноеИмяРодителя, "ПолноеИмя");
- Если ЗначениеЗаполнено(СтрокаРодителя.Идентификатор) Тогда
- Строка.Родитель = СтрокаРодителя.Идентификатор;
- Иначе
- ИмяПредопределенногоЭлементаРодителя = СтрЗаменить(Строка.ПолноеИмяРодителя, ".", "_");
- Попытка
- Строка.Родитель = СправочникМенеджер[ИмяПредопределенногоЭлементаРодителя];
- Исключение
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'В справочнике Идентификаторы объектов метаданных
- |для предопределенного элемента:
- |""%1"",
- |не найден предопределенный элемент родителя:
- |""%2"".
- |
- |Следует добавить предопределенный элемент родителя.'"),
- ПолучитьИмяПредопределенного(Выборка.Ссылка),
- СтрЗаменить(Строка.ПолноеИмяРодителя, ".", "_"));
- КонецПопытки;
- КонецЕсли;
- КонецЕсли;
+ СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя");
КонецЕсли;
- Если ОбъектМетаданных = Неопределено ИЛИ Строка.Обработана Тогда
+ Если ОбъектМетаданных = Неопределено ИЛИ СвойстваОбъекта.Найден Тогда
// Если объект метаданных не найден или найден повторно
- // тогда дубль идентификатора требуется пометить на удаление
- Если Выборка.Предопределенный = Выборка.ПометкаУдаления
- ИЛИ ЗначениеЗаполнено(Выборка.Родитель)
- ИЛИ Лев(Выборка.Наименование, 1) <> "?"
- ИЛИ Лев(Выборка.Имя, 1) <> "?"
- ИЛИ Лев(Выборка.Синоним, 1) <> "?"
- ИЛИ Лев(Выборка.ПолноеИмя, 1) <> "?"
- ИЛИ Лев(Выборка.ПолныйСиноним, 1) <> "?"
- ИЛИ Выборка.Используется
- ИЛИ Выборка.ЗначениеПустойСсылки <> Неопределено Тогда
- // Сохранения старых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных
- ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект();
- Свойства = ПараметрыОбработчикаСобытия();
- ЗаполнитьЗначенияСвойств(Свойства.Старые, ТаблицаОбъект);
- // Установка новых свойств идентификатора объекта метаданных
- ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект();
- Используется = ТаблицаОбъект.Используется;
- ТаблицаОбъект.ПометкаУдаления = НЕ Выборка.Предопределенный;
- ТаблицаОбъект.Родитель = Неопределено;
- ТаблицаОбъект.Наименование = "? " + ТаблицаОбъект.Наименование;
- ТаблицаОбъект.Имя = "? " + ТаблицаОбъект.Имя;
- ТаблицаОбъект.Синоним = "? " + ТаблицаОбъект.Синоним;
- ТаблицаОбъект.ПолноеИмя = "? " + ТаблицаОбъект.ПолноеИмя;
- ТаблицаОбъект.ПолныйСиноним = "? " + ТаблицаОбъект.ПолныйСиноним;
- ТаблицаОбъект.Используется = Ложь;
- ТаблицаОбъект.ЗначениеПустойСсылки = Неопределено;
- ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника");
- ТаблицаОбъект.Записать();
- ЕстьИзменения = Истина;
- // Обработка преобразования обычного элемента в предопределенный
- // выполняется, если при существовании обычного элемента был добавлен
- // предопределенный элемент
- Если ОбъектМетаданных <> Неопределено И Используется Тогда
- // Поиск предопределенного элемента
- Запрос = Новый Запрос;
- Запрос.УстановитьПараметр("ПолноеИмя", ОбъектМетаданных.ПолноеИмя());
- Запрос.Текст =
- "ВЫБРАТЬ
- | Таблица.Ссылка,
- | Таблица.ПолноеИмя
- |ИЗ
- | Справочник.ИдентификаторыОбъектовМетаданных КАК Таблица
- |ГДЕ
- | Таблица.ПолноеИмя = &ПолноеИмя
- | И Таблица.Предопределенный";
- Выгрузка = Запрос.Выполнить().Выгрузить();
- // Если найдено более одного предопределенного элемента для одного
- // объекта метаданных, значит произошла ошибка при разработке или
- // при установке разным предопределенным элементам ключа одного и
- // того же объекта метаданных
- Если Выгрузка.Количество() > 1 Тогда
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Ошибка при обновлении справочника ""Идентификаторы объектов метаданных"".
- |По внутреннему ключу поиска для объекта метаданных ""%1""
- |найдено более одного предопределенного элемента.'"),
- Выгрузка[0].ПолноеИмя);
- ИначеЕсли Выгрузка.Количество() = 1 Тогда
- // Если старый идентификатор использован в базе данных его требуется
- // заменить на новый идентификатор предопределенного элемента
- Строка.ИзменениеСЗаменой = Истина;
- Свойства.СтандартнаяЗаменаСсылок = Истина;
- Свойства.Новые = Строка.ПараметрОбработчикаСобытияИзменение.Новые;
- ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Изменение", Свойства);
- Если Свойства.СтандартнаяЗаменаСсылок = Истина Тогда
- ЗаменитьСсылкуВИнформационнойБазе(ТаблицаОбъект.Ссылка, Выгрузка[0].Ссылка);
- КонецЕсли;
- КонецЕсли;
- Иначе
- ЕстьУдаленные = Истина;
- // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных
- ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Удаление", Свойства);
- КонецЕсли;
+ // тогда идентификатор требуется пометить на удаление.
+ Если НЕ Свойства.ПометкаУдаления
+ ИЛИ ЗначениеЗаполнено(Свойства.Родитель)
+ ИЛИ Лев(Свойства.Наименование, 1) <> "?"
+ ИЛИ Лев(Свойства.Имя, 1) <> "?"
+ ИЛИ Лев(Свойства.Синоним, 1) <> "?"
+ ИЛИ Лев(Свойства.ПолноеИмя, 1) <> "?"
+ ИЛИ Лев(Свойства.ПолныйСиноним, 1) <> "?"
+ ИЛИ Свойства.ЗначениеПустойСсылки <> Неопределено
+ ИЛИ Свойства.КлючОбъектаМетаданных <> Неопределено Тогда
+
+ // Установка новых свойств идентификатора объекта метаданных.
+ Свойства.ПометкаУдаления = Истина;
+ Свойства.Родитель = ПустаяСсылка();
+ Свойства.Наименование = ВставитьЗнакВопроса(Свойства.Наименование);
+ Свойства.Имя = ВставитьЗнакВопроса(Свойства.Имя);
+ Свойства.Синоним = ВставитьЗнакВопроса(Свойства.Синоним);
+ Свойства.ПолноеИмя = ВставитьЗнакВопроса(Свойства.ПолноеИмя);
+ Свойства.ПолныйСиноним = ВставитьЗнакВопроса(Свойства.ПолныйСиноним);
+ Свойства.ЗначениеПустойСсылки = Неопределено;
+ Свойства.КлючОбъектаМетаданных = Неопределено;
+ Свойства.Обновлен = Истина;
+ ЕстьУдаленные = Истина;
КонецЕсли;
Иначе
- // Обновление свойств существующих объектов метаданных, если изменились
- Строка.Обработана = Истина;
- Если Выборка.Родитель <> Строка.Родитель
- ИЛИ Выборка.Наименование <> Строка.Наименование
- ИЛИ Выборка.ПорядокКоллекции <> Строка.ПорядокКоллекции
- ИЛИ Выборка.Имя <> Строка.Имя
- ИЛИ Выборка.Синоним <> Строка.Синоним
- ИЛИ Выборка.ПолноеИмя <> Строка.ПолноеИмя
- ИЛИ Выборка.ПолныйСиноним <> Строка.ПолныйСиноним
- ИЛИ Выборка.БезДанных <> Строка.БезДанных
- ИЛИ Выборка.ЗначениеПустойСсылки <> Строка.ЗначениеПустойСсылки
- ИЛИ Выборка.ПометкаУдаления
+ // Обновление свойств существующих объектов метаданных, если изменились.
+ СвойстваОбъекта.Найден = Истина;
+ Если Свойства.Наименование <> СвойстваОбъекта.Наименование
+ ИЛИ Свойства.ПорядокКоллекции <> СвойстваОбъекта.ПорядокКоллекции
+ ИЛИ Свойства.Имя <> СвойстваОбъекта.Имя
+ ИЛИ Свойства.Синоним <> СвойстваОбъекта.Синоним
+ ИЛИ Свойства.ПолноеИмя <> СвойстваОбъекта.ПолноеИмя
+ ИЛИ Свойства.ПолныйСиноним <> СвойстваОбъекта.ПолныйСиноним
+ ИЛИ Свойства.БезДанных <> СвойстваОбъекта.БезДанных
+ ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки
+ ИЛИ Свойства.ПометкаУдаления
ИЛИ КлючОбъектаМетаданных = Неопределено
- ИЛИ НЕ Выборка.Используется Тогда
- // Сохранения старых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных
- ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект();
- Свойства = ПараметрыОбработчикаСобытия();
- ЗаполнитьЗначенияСвойств(Свойства.Старые, ТаблицаОбъект);
- // Установка новых свойств идентификатора объекта метаданных
- ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Строка);
- Если КлючОбъектаМетаданных = Неопределено Тогда
- ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(Строка.ПолноеИмя));
+ ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных
+ И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда
+
+ // Установка новых свойств идентификатора объекта метаданных.
+ ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта);
+
+ Если КлючОбъектаМетаданных = Неопределено
+ ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных
+ И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда
+
+ Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя);
КонецЕсли;
- ТаблицаОбъект.ПометкаУдаления = Ложь;
- ТаблицаОбъект.Используется = Истина;
- ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника");
- ТаблицаОбъект.Записать();
- ЕстьИзменения = Истина;
- // Сохранения новых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных
- ЗаполнитьЗначенияСвойств(Свойства.Новые, ТаблицаОбъект);
- Строка.Изменение = Истина;
- Строка.ПараметрОбработчикаСобытияИзменение = Свойства;
+
+ Свойства.ПометкаУдаления = Ложь;
+ Свойства.Обновлен = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
- // Добавление идентификаторов новых объектов метаданных
- // Объекты метаданных без ключа объекта метаданных не добавляются,
- // такие объекты метаданных добавляются только вручную в виде предопределенных элементов,
- // например, подсистемы
- Для каждого Строка Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Обработана", Ложь)) Цикл
- ТаблицаОбъект = СоздатьЭлемент();
- Если ЗначениеЗаполнено(Строка.Идентификатор) Тогда
- ТаблицаОбъект.УстановитьСсылкуНового(Строка.Идентификатор);
+ // Добавление идентификаторов новых объектов метаданных.
+ Для каждого СвойстваОбъекта Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Найден", Ложь)) Цикл
+ Свойства = Выгрузка.Добавить();
+ ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта);
+ Свойства.ЭтоНовый = Истина;
+ Свойства.Ссылка = ПолучитьСсылку();
+ Свойства.Предопределенный = Ложь;
+ Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(Свойства.ПолноеИмя);
+ КонецЦикла;
+
+ // Обновление родителей идентификаторов объектов метаданных.
+ Для каждого Свойства Из Выгрузка Цикл
+
+ Если НЕ Свойства.Предопределенный Тогда
+ СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя");
+ НовыйРодитель = ПустаяСсылка();
+
+ Если СвойстваОбъекта <> Неопределено Тогда
+
+ Если НЕ ЗначениеЗаполнено(СвойстваОбъекта.ПолноеИмяРодителя) Тогда
+ // Коллекция объектов метаданных.
+ НовыйРодитель = СвойстваОбъекта.Родитель;
+ Иначе
+ // Не коллекция объектов метаданных, например, подсистема.
+ ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя");
+ Если ОписаниеРодителя <> Неопределено Тогда
+ НовыйРодитель = ОписаниеРодителя.Ссылка;
+ КонецЕсли;
+ КонецЕсли;
+ КонецЕсли;
+
+ Если Свойства.Родитель <> НовыйРодитель Тогда
+ Свойства.Родитель = НовыйРодитель;
+ Свойства.Обновлен = Истина;
+ КонецЕсли;
КонецЕсли;
- Если ЗначениеЗаполнено(Строка.ПолноеИмяРодителя) Тогда
- Строка.Родитель = СвойстваОбъектовМетаданных.Найти(Строка.ПолноеИмяРодителя, "ПолноеИмя").Идентификатор;
+
+ Если Свойства.ЭтоНовый Тогда
+ ТаблицаОбъект = СоздатьЭлемент();
+ ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка);
+
+ ИначеЕсли Свойства.Обновлен Тогда
+ ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект();
+ Иначе
+ Продолжить;
КонецЕсли;
- ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Строка);
- ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(Строка.ПолноеИмя));
- ТаблицаОбъект.Используется = Истина;
+ ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Свойства);
+ ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных);
ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника");
ТаблицаОбъект.Записать();
ЕстьИзменения = Истина;
- // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных
- Свойства = ПараметрыОбработчикаСобытия();
- ЗаполнитьЗначенияСвойств(Свойства.Новые, ТаблицаОбъект);
- ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Добавление", Свойства);
- КонецЦикла;
-
- // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных для вида события "Изменение" без замены
- Для каждого Строка Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Изменение, ИзменениеСЗаменой", Истина, Ложь)) Цикл
- ТребуетсяВызовОбработчикаСобытия = Ложь;
- Свойства = Строка.ПараметрОбработчикаСобытияИзменение;
- Для каждого КлючИЗначение ИЗ Свойства.Новые Цикл
- Если Свойства.Новые[КлючИЗначение.Ключ] <> Свойства.Старые[КлючИЗначение.Ключ] Тогда
- ТребуетсяВызовОбработчикаСобытия = Истина;
- Прервать;
- КонецЕсли;
- КонецЦикла;
- Если ТребуетсяВызовОбработчикаСобытия Тогда
- ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Изменение", Свойства);
- КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
@@ -386,7 +272,141 @@
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС
-// Только для внутреннего использования
+// Только для внутреннего использования.
+Процедура ВыгрузитьДанныеСправочника(Знач КаталогВыгрузки) Экспорт
+
+ Запись = Новый ЗаписьXML;
+ Запись.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml");
+ Запись.ЗаписатьОбъявлениеXML();
+
+ Запись.ЗаписатьНачалоЭлемента("Data");
+ Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
+ Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
+ Запись.ЗаписатьСоответствиеПространстваИмен("ns1", "http://v8.1c.ru/8.1/data/core");
+ Запись.ЗаписатьСоответствиеПространстваИмен("ns2", "http://v8.1c.ru/8.1/data/enterprise");
+ Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/enterprise/current-config");
+
+ НачатьТранзакцию();
+ Попытка
+ Блокировка = Новый БлокировкаДанных;
+ ЭлементБлокировки = Блокировка.Добавить();
+ ЭлементБлокировки.Область = "Справочник.ИдентификаторыОбъектовМетаданных";
+ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
+ Блокировка.Заблокировать();
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | ИдентификаторыОбъектовМетаданных.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных";
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ ЗафиксироватьТранзакцию();
+ Исключение
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+ КонецПопытки;
+
+ Пока Выборка.Следующий() Цикл
+ СериализаторXDTO.ЗаписатьXML(Запись, Выборка.Ссылка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
+ КонецЦикла;
+
+ Запись.ЗаписатьКонецЭлемента();
+
+ Запись.Закрыть();
+
+КонецПроцедуры
+
+// Только для внутреннего использования.
+Процедура ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных(
+ Знач СловарьЗамен,
+ Знач КаталогВыгрузки) Экспорт
+
+ // Перед загрузкой в пустую базу требутся обновление справочника.
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ ПЕРВЫЕ 1
+ | ИСТИНА КАК ЗначениеИстина
+ |ИЗ
+ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
+ |ГДЕ
+ | НЕ Идентификаторы.Предопределенный";
+
+ Если Запрос.Выполнить().Пустой() Тогда
+ ОбновитьДанныеСправочника();
+ КонецЕсли;
+
+ СоответствиеСсылок = Новый Соответствие;
+
+ Чтение = Новый ЧтениеXML;
+ Чтение.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml");
+ Чтение.ПерейтиКСодержимому();
+ Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента
+ ИЛИ Чтение.Имя <> "Data" Тогда
+
+ ВызватьИсключение(НСтр("ru = 'Неверный формат файла MetadataObjectsIdentifiers.xml'"));
+
+ КонецЕсли;
+
+ Если НЕ Чтение.Прочитать() Тогда
+ ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'"));
+ КонецЕсли;
+
+ Запрос = Новый Запрос;
+ Запрос.Текст =
+ "ВЫБРАТЬ
+ | Идентификаторы.Ссылка,
+ | Идентификаторы.ПолноеИмя,
+ | Идентификаторы.ПометкаУдаления
+ |ИЗ
+ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы";
+
+ СвойстваИдентификаторов = Запрос.Выполнить().Выгрузить();
+ СвойстваИдентификаторов.Индексы.Добавить("Ссылка");
+ СвойстваИдентификаторов.Индексы.Добавить("ПолноеИмя");
+
+ Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
+ Данные = СериализаторXDTO.ПрочитатьXML(Чтение);
+
+ СвойстваИдентификатора = СвойстваИдентификаторов.Найти(Данные.Ссылка, "Ссылка");
+ Если СвойстваИдентификатора = Неопределено
+ ИЛИ СвойстваИдентификатора.ПометкаУдаления Тогда
+
+ КлючОбъектаМетаданных = Данные.КлючОбъектаМетаданных.Получить();
+ ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных);
+
+ Если ОбъектМетаданных = Неопределено Тогда
+ ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные.ПолноеИмя);
+ КонецЕсли;
+
+ Если ОбъектМетаданных <> Неопределено Тогда
+ Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных);
+
+ // Ключ - Существующая ссылка.
+ // Значение - Загружаемая ссылка.
+ СсылкаНового = Данные.ПолучитьСсылкуНового();
+ Если ЗначениеЗаполнено(СсылкаНового) Тогда
+ ЗагружаемыйИдентификатор = СсылкаНового.УникальныйИдентификатор();
+ Иначе
+ ЗагружаемыйИдентификатор = Данные.Ссылка.УникальныйИдентификатор();
+ КонецЕсли;
+
+ СоответствиеСсылок.Вставить(Идентификатор.УникальныйИдентификатор(), ЗагружаемыйИдентификатор);
+ КонецЕсли;
+ КонецЕсли;
+ КонецЦикла;
+
+ СтрокаФрагмента = СловарьЗамен.Добавить();
+ СтрокаФрагмента.Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных");
+ СтрокаФрагмента.СоответствиеСсылок = СоответствиеСсылок;
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+// Только для внутреннего использования.
Функция КлючОбъектаМетаданныхСоответствуетПолномуИмени(СвойстваИдентификатора) Экспорт
РезультатПроверки = Новый Структура;
@@ -425,183 +445,180 @@
КонецФункции
-// Только для внутреннего использования
-Процедура ВыгрузитьДанныеСправочника(Знач КаталогВыгрузки) Экспорт
-
- Запись = Новый ЗаписьXML;
- Запись.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml");
- Запись.ЗаписатьОбъявлениеXML();
-
- Запись.ЗаписатьНачалоЭлемента("Data");
- Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
- Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
- Запись.ЗаписатьСоответствиеПространстваИмен("ns1", "http://v8.1c.ru/8.1/data/core");
- Запись.ЗаписатьСоответствиеПространстваИмен("ns2", "http://v8.1c.ru/8.1/data/enterprise");
- Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/enterprise/current-config");
+// Только для внутреннего использования.
+Функция ПолноеИмяИспользуется(ПолноеИмя, КромеИдентификатора = Неопределено) Экспорт
Запрос = Новый Запрос;
- Запрос.Текст =
- "ВЫБРАТЬ
- | ИдентификаторыОбъектовМетаданных.Ссылка КАК Ссылка
- |ИЗ
- | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных";
- Выборка = Запрос.Выполнить().Выбрать();
-
- Пока Выборка.Следующий() Цикл
- СериализаторXDTO.ЗаписатьXML(Запись, Выборка.Ссылка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
- КонецЦикла;
-
- Запись.ЗаписатьКонецЭлемента();
-
- Запись.Закрыть();
-
-КонецПроцедуры
-
-// Только для внутреннего использования
-Процедура ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных(Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт
-
- // Перед загрузкой в пустую базу требутся обновление справочника.
- Запрос = Новый Запрос;
+ Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмя);
+ Запрос.УстановитьПараметр("Ссылка", КромеИдентификатора);
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЗначениеИстина
|ИЗ
- | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы
+ | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных
|ГДЕ
- | НЕ Идентификаторы.Предопределенный";
+ | ИдентификаторыОбъектовМетаданных.Ссылка <> &Ссылка
+ | И ИдентификаторыОбъектовМетаданных.ПолноеИмя = &ПолноеИмя";
- Если Запрос.Выполнить().Пустой() Тогда
- ОбновитьДанныеСправочника();
+ Возврат НЕ Запрос.Выполнить().Пустой();
+
+КонецФункции
+
+// Только для внутреннего использования.
+// ПолноеИмя в объекте должно быть уже установлено и корректно.
+//
+Процедура ОбновитьСвойстваИдентификатора(Объект) Экспорт
+
+ // Восстановление старых значений.
+ Если НЕ Объект.ЭтоНовый() Тогда
+ СтарыеЗначения = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(
+ Объект.Ссылка,
+ "Наименование,
+ |ПорядокКоллекции,
+ |Имя,
+ |Синоним,
+ |ПолныйСиноним,
+ |БезДанных,
+ |ЗначениеПустойСсылки,
+ |КлючОбъектаМетаданных");
+ ЗаполнитьЗначенияСвойств(Объект, СтарыеЗначения);
КонецЕсли;
- СоответствиеСсылок = Новый Соответствие;
+ ПолноеИмя = Объект.ПолноеИмя;
+ ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
- Чтение = Новый ЧтениеXML;
- Чтение.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml");
- Чтение.ПерейтиКСодержимому();
- Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента
- ИЛИ Чтение.Имя <> "Data" Тогда
+ Если ОбъектМетаданных = Неопределено Тогда
+ Объект.ПометкаУдаления = Истина;
+ Объект.Родитель = ПустаяСсылка();
+ Объект.Наименование = ВставитьЗнакВопроса(Объект.Наименование);
+ Объект.Имя = ВставитьЗнакВопроса(Объект.Имя);
+ Объект.Синоним = ВставитьЗнакВопроса(Объект.Синоним);
+ Объект.ПолноеИмя = ВставитьЗнакВопроса(Объект.ПолноеИмя);
+ Объект.ПолныйСиноним = ВставитьЗнакВопроса(Объект.ПолныйСиноним);
+ Объект.ЗначениеПустойСсылки = Неопределено;
- ВызватьИсключение(НСтр("ru = 'Неверный формат файла MetadataObjectsIdentifiers.xml'"));
+ Если ТипЗнч(Объект) <> Тип("ДанныеФормыСтруктура") Тогда
+ Объект.КлючОбъектаМетаданных = Неопределено;
+ КонецЕсли;
+ Иначе
+ ПолноеИмя = ОбъектМетаданных.ПолноеИмя();
+ ПозицияТочки = Найти(ПолноеИмя, ".");
+ ИмяБазовогоТипа = Лев(ПолноеИмя, ПозицияТочки -1);
- КонецЕсли;
-
- Если НЕ Чтение.Прочитать() Тогда
- ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'"));
- КонецЕсли;
-
- Запрос = Новый Запрос;
- Запрос.Текст =
- "ВЫБРАТЬ
- | Идентификаторы.Ссылка,
- | Идентификаторы.ПолноеИмя,
- | Идентификаторы.Используется
- |ИЗ
- | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы";
-
- СвойстваИдентификаторов = Запрос.Выполнить().Выгрузить();
- СвойстваИдентификаторов.Индексы.Добавить("Ссылка");
- СвойстваИдентификаторов.Индексы.Добавить("ПолноеИмя");
-
- Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
- Данные = СериализаторXDTO.ПрочитатьXML(Чтение);
+ СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных();
+ Отбор = Новый Структура("ИмяВЕдЧисле", ИмяБазовогоТипа);
+ Строки = СвойстваКоллекцийОбъектовМетаданных.НайтиСтроки(Отбор);
+ СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных.Скопировать(Строки);
- СвойстваИдентификатора = СвойстваИдентификаторов.Найти(Данные.Ссылка, "Ссылка");
- Если СвойстваИдентификатора = Неопределено
- ИЛИ НЕ СвойстваИдентификатора.Используется Тогда
-
- КлючОбъектаМетаданных = Данные.КлючОбъектаМетаданных.Получить();
- Если КлючОбъектаМетаданных <> Неопределено
- И КлючОбъектаМетаданных <> Тип("Неопределено")
- И ТипЗнч(КлючОбъектаМетаданных) = Тип("Тип") Тогда
+ СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных);
+ СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ПолноеИмя, "ПолноеИмя");
+
+ ЗаполнитьЗначенияСвойств(Объект, СвойстваОбъекта);
+
+ Если ТипЗнч(Объект) <> Тип("ДанныеФормыСтруктура") Тогда
+ КлючОбъектаМетаданных = Объект.КлючОбъектаМетаданных.Получить();
+ Если КлючОбъектаМетаданных = Неопределено
+ ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных
+ И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда
- ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных);
- Иначе
- ОбъектМетаданных = Неопределено;
- КонецЕсли;
-
- Если ОбъектМетаданных = Неопределено Тогда
- ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные.ПолноеИмя);
- КонецЕсли;
-
- Если ОбъектМетаданных <> Неопределено Тогда
- Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных);
- Если Данные.Ссылка <> Идентификатор Тогда
- // Ключ - Существующая ссылка.
- // Значение - Загружаемая ссылка.
- СоответствиеСсылок.Вставить(Идентификатор, Данные.Ссылка);
- КонецЕсли;
+ Объект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя));
КонецЕсли;
КонецЕсли;
- КонецЦикла;
-
- СтрокаФрагмента = СловарьЗамен.Добавить();
- СтрокаФрагмента.Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных");
- СтрокаФрагмента.СоответствиеСсылок = СоответствиеСсылок;
+ КонецЕсли;
КонецПроцедуры
-////////////////////////////////////////////////////////////////////////////////
-// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+// Только для внутреннего использования.
+Функция ЗапрещеноИзменятьПолноеИмя(Объект) Экспорт
+
+ Если Объект.Предопределенный Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ ПозицияТочки = Найти(Объект.ПолноеИмя, ".");
+ ИмяБазовогоТипа = Лев(Объект.ПолноеИмя, ПозицияТочки -1);
+
+ СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных();
+ СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяБазовогоТипа, "ИмяВЕдЧисле");
+
+ Если СвойстваКоллекции <> Неопределено
+ И НЕ СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда
+
+ Возврат Истина;
+ КонецЕсли;
+
+ Возврат Ложь;
+
+КонецФункции
Процедура ПроверитьОбновитьСвойстваКоллекции(Знач ТекущиеСвойства, Знач НовыеСвойства, ЕстьИзменения)
- НаименованиеКоллекции = НовыеСвойства.Синоним + " (" + НСтр("ru = 'Коллекция'") + ")";
+ НаименованиеКоллекции = НовыеСвойства.Синоним;
- Если ТекущиеСвойства.Наименование <> НаименованиеКоллекции
- ИЛИ ТекущиеСвойства.ПорядокКоллекции <> НовыеСвойства.ПорядокКоллекции
- ИЛИ ТекущиеСвойства.Имя <> НовыеСвойства.Имя
- ИЛИ ТекущиеСвойства.Синоним <> НовыеСвойства.Синоним
- ИЛИ ТекущиеСвойства.ПолноеИмя <> НовыеСвойства.Имя
- ИЛИ ТекущиеСвойства.ПолныйСиноним <> НовыеСвойства.Синоним
- ИЛИ ТекущиеСвойства.БезДанных <> Ложь
- ИЛИ ТекущиеСвойства.ЗначениеПустойСсылки <> Неопределено
- ИЛИ ТекущиеСвойства.Используется <> Истина
- ИЛИ ТекущиеСвойства.КлючОбъектаМетаданных.Получить() <> Неопределено Тогда
+ Если ТекущиеСвойства.Наименование <> НаименованиеКоллекции
+ ИЛИ ТекущиеСвойства.ПорядокКоллекции <> НовыеСвойства.ПорядокКоллекции
+ ИЛИ ТекущиеСвойства.Имя <> НовыеСвойства.Имя
+ ИЛИ ТекущиеСвойства.Синоним <> НовыеСвойства.Синоним
+ ИЛИ ТекущиеСвойства.ПолноеИмя <> НовыеСвойства.Имя
+ ИЛИ ТекущиеСвойства.ПолныйСиноним <> НовыеСвойства.Синоним
+ ИЛИ ТекущиеСвойства.БезДанных <> Ложь
+ ИЛИ ТекущиеСвойства.ЗначениеПустойСсылки <> Неопределено
+ ИЛИ ТекущиеСвойства.КлючОбъектаМетаданных <> Неопределено Тогда
- // Установка новых свойств
- Объект = ТекущиеСвойства.Ссылка.ПолучитьОбъект();
- Объект.Наименование = НаименованиеКоллекции;
- Объект.ПорядокКоллекции = НовыеСвойства.ПорядокКоллекции;
- Объект.Имя = НовыеСвойства.Имя;
- Объект.Синоним = НовыеСвойства.Синоним;
- Объект.ПолноеИмя = НовыеСвойства.Имя;
- Объект.ПолныйСиноним = НовыеСвойства.Синоним;
- Объект.БезДанных = Ложь;
- Объект.ЗначениеПустойСсылки = Неопределено;
- Объект.КлючОбъектаМетаданных = Неопределено;
- Объект.Используется = Истина;
- Объект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника");
- Объект.Записать();
- ЕстьИзменения = Истина;
+ // Установка новых свойств.
+ ТекущиеСвойства.Наименование = НаименованиеКоллекции;
+ ТекущиеСвойства.ПорядокКоллекции = НовыеСвойства.ПорядокКоллекции;
+ ТекущиеСвойства.Имя = НовыеСвойства.Имя;
+ ТекущиеСвойства.Синоним = НовыеСвойства.Синоним;
+ ТекущиеСвойства.ПолноеИмя = НовыеСвойства.Имя;
+ ТекущиеСвойства.ПолныйСиноним = НовыеСвойства.Синоним;
+ ТекущиеСвойства.БезДанных = Ложь;
+ ТекущиеСвойства.ЗначениеПустойСсылки = Неопределено;
+ ТекущиеСвойства.КлючОбъектаМетаданных = Неопределено;
+ ТекущиеСвойства.Обновлен = Истина;
КонецЕсли;
КонецПроцедуры
-Функция НайтиОбъектМетаданныхПредопределенного(Знач Ссылка, ПолноеИмя)
+Функция ТаблицаПереименованияДляТекущейВерсии(СвойстваКоллекцийОбъектовМетаданных)
- ИмяПредопределенного = ПолучитьИмяПредопределенного(Ссылка);
+ ТаблицаПереименования = Новый ТаблицаЗначений;
+ ТаблицаПереименования.Колонки.Добавить("ПорядокБиблиотеки", Новый ОписаниеТипов("Число"));
+ ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть1", Новый ОписаниеТипов("Число"));
+ ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть2", Новый ОписаниеТипов("Число"));
+ ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть3", Новый ОписаниеТипов("Число"));
+ ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть4", Новый ОписаниеТипов("Число"));
+ ТаблицаПереименования.Колонки.Добавить("ПорядокДобавления", Новый ОписаниеТипов("Число"));
+ ТаблицаПереименования.Колонки.Добавить("СтароеПолноеИмя", Новый ОписаниеТипов("Строка"));
+ ТаблицаПереименования.Колонки.Добавить("НовоеПолноеИмя", Новый ОписаниеТипов("Строка"));
- Если ВРег(Лев(ИмяПредопределенного, 11)) = ВРег("Подсистема_") Тогда
- Пока Истина Цикл
- ПозицияСледующегоИмени = Найти(ВРег(ИмяПредопределенного), ВРег("_Подсистема"));
- Если ПозицияСледующегоИмени > 0 Тогда
- ПолноеИмя = ПолноеИмя + ".Подсистема." + Сред(ИмяПредопределенного, 12, ПозицияСледующегоИмени - 12);
- ИмяПредопределенного = Сред(ИмяПредопределенного, ПозицияСледующегоИмени + 1);
- Иначе
- ПолноеИмя = ПолноеИмя + ".Подсистема." + Сред(ИмяПредопределенного, 12);
- Прервать;
- КонецЕсли;
- КонецЦикла;
- ПолноеИмя = Сред(ПолноеИмя, 2);
- Иначе
- ПозицияПодчеркивания = Найти(ИмяПредопределенного, "_");
- ПолноеИмя = Лев(ИмяПредопределенного, ПозицияПодчеркивания-1)
- + "."
- + Сред(ИмяПредопределенного, ПозицияПодчеркивания + 1);
- КонецЕсли;
+ КоллекцииБезКлюча = Новый Соответствие;
- Возврат Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
+ Отбор = Новый Структура("БезКлючаОбъектаМетаданных", Истина);
+ КоллекцииБезКлючаОбъектаМетаданных = СвойстваКоллекцийОбъектовМетаданных.НайтиСтроки(Отбор);
+
+ Для каждого Строка Из КоллекцииБезКлючаОбъектаМетаданных Цикл
+ КоллекцииБезКлюча.Вставить(ВРег(Строка.ИмяВЕдЧисле), Строка.ИмяВЕдЧисле);
+ КонецЦикла;
+
+ Итог = Новый Структура;
+ Итог.Вставить("Таблица", ТаблицаПереименования);
+ Итог.Вставить("КоллекцииБезКлюча", КоллекцииБезКлюча);
+ Итог.Вставить("ВерсииБиблиотек", Новый Соответствие);
+ Итог.Вставить("ПорядокБиблиотек", Новый Соответствие);
+
+ СтандартныеПодсистемыПереопределяемый.ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог);
+ ОбщегоНазначенияПереопределяемый.ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог);
+
+ ТаблицаПереименования.Сортировать(
+ "ПорядокБиблиотеки ВОЗР,
+ |ВерсияЧасть1 ВОЗР,
+ |ВерсияЧасть2 ВОЗР,
+ |ВерсияЧасть3 ВОЗР,
+ |ВерсияЧасть4 ВОЗР,
+ |ПорядокДобавления ВОЗР");
+
+ Возврат ТаблицаПереименования;
КонецФункции
@@ -612,12 +629,7 @@
КлассОМ = Лев( ПолноеИмя, ПозицияТочки-1);
ИмяОМ = Сред(ПолноеИмя, ПозицияТочки+1);
- Если ВРег(КлассОМ) = ВРег("Роль") Тогда
- ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
- ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИмяОМ]);
- Возврат ПользовательИБ.Роли;
-
- ИначеЕсли ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда
+ Если ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда
Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ);
ИначеЕсли ВРег(КлассОМ) = ВРег("Справочник") Тогда
@@ -672,13 +684,7 @@
ОбъектМетаданных = Неопределено;
- Если ТипЗнч(КлючОбъектаМетаданных) = Тип("РолиПользователя") Тогда
- Для каждого Роль Из Метаданные.Роли Цикл
- Если КлючОбъектаМетаданных.Содержит(Роль) Тогда
- Возврат Роль;
- КонецЕсли;
- КонецЦикла;
- Иначе
+ Если ТипЗнч(КлючОбъектаМетаданных) = Тип("Тип") Тогда
ОбъектМетаданных = Метаданные.НайтиПоТипу(КлючОбъектаМетаданных);
КонецЕсли;
@@ -693,7 +699,6 @@
СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510)));
СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмяРодителя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510)));
СвойстваОбъектовМетаданных.Колонки.Добавить("ПорядокКоллекции", Новый ОписаниеТипов("Число"));
- СвойстваОбъектовМетаданных.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных"));
СвойстваОбъектовМетаданных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных"));
СвойстваОбъектовМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)));
СвойстваОбъектовМетаданных.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255)));
@@ -702,26 +707,21 @@
СвойстваОбъектовМетаданных.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево"));
СвойстваОбъектовМетаданных.Колонки.Добавить("ЗначениеПустойСсылки");
- // Подготовка предустановленных идентификаторов
- ПредустановленныеИдентификаторы = Новый ТаблицаЗначений;
- ПредустановленныеИдентификаторы.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных"));
- ПредустановленныеИдентификаторы.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка"));
-
- ОбщегоНазначенияПереопределяемый.ЗаполнитьПредустановленныеИдентификаторыОбъектовМетаданных(ПредустановленныеИдентификаторы);
-
Для каждого СвойстваКоллекции Из СвойстваКоллекцийОбъектовМетаданных Цикл
- ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, СвойстваОбъектовМетаданных, ПредустановленныеИдентификаторы);
+ ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, СвойстваОбъектовМетаданных);
КонецЦикла;
- Если ПредустановленныеИдентификаторы.Количество() > 0 Тогда
- ВызватьИсключениеОшибкиЗаполненияПредустановленныхИдентификаторов(ПредустановленныеИдентификаторы, СвойстваКоллекцийОбъектовМетаданных);
- КонецЕсли;
+ СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя");
Возврат СвойстваОбъектовМетаданных;
КонецФункции
-Процедура ДобавитьСвойстваОбъектовМетаданных(Знач КолекцияОбъектовМетаданных, Знач СвойстваКоллекции, Знач СвойстваОбъектовМетаданных, Знач ПредустановленныеИдентификаторы, Знач ПолноеИмяРодителя = "", Знач ПолныйСинонимРодителя = "")
+Процедура ДобавитьСвойстваОбъектовМетаданных(Знач КолекцияОбъектовМетаданных,
+ Знач СвойстваКоллекции,
+ Знач СвойстваОбъектовМетаданных,
+ Знач ПолноеИмяРодителя = "",
+ Знач ПолныйСинонимРодителя = "")
Для каждого ОбъектМетаданных Из КолекцияОбъектовМетаданных Цикл
@@ -735,37 +735,35 @@
ЗначениеПустойСсылки = Неопределено;
КонецЕсли;
- Если СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда
- ОписаниеИдентификатора = ПредустановленныеИдентификаторы.Найти(ПолноеИмя, "ПолноеИмя");
- Если ОписаниеИдентификатора = Неопределено Тогда
- Продолжить;
- КонецЕсли;
- Идентификатор = ОписаниеИдентификатора.Идентификатор;
- ПредустановленныеИдентификаторы.Удалить(ОписаниеИдентификатора);
- Иначе
- Идентификатор = ПустаяСсылка();
- КонецЕсли;
-
НоваяСтрока = СвойстваОбъектовМетаданных.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваКоллекции);
- НоваяСтрока.Идентификатор = Идентификатор;
- НоваяСтрока.Родитель = СвойстваКоллекции.ИдентификаторКоллекции;
- НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции);
- НоваяСтрока.ПолноеИмя = ПолноеИмя;
- НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя;
- НоваяСтрока.Имя = ОбъектМетаданных.Имя;
- НоваяСтрока.Синоним = ?(ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя);
- НоваяСтрока.ПолныйСиноним = ПолныйСинонимРодителя + СвойстваКоллекции.СинонимВЕдЧисле + ". " + НоваяСтрока.Синоним;
+ НоваяСтрока.Родитель = СвойстваКоллекции.ИдентификаторКоллекции;
+ НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции);
+ НоваяСтрока.ПолноеИмя = ПолноеИмя;
+ НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя;
+ НоваяСтрока.Имя = ОбъектМетаданных.Имя;
+
+ НоваяСтрока.Синоним = ?(
+ ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя);
+
+ НоваяСтрока.ПолныйСиноним =
+ ПолныйСинонимРодителя + СвойстваКоллекции.СинонимВЕдЧисле + ". " + НоваяСтрока.Синоним;
+
НоваяСтрока.ЗначениеПустойСсылки = ЗначениеПустойСсылки;
Если СвойстваКоллекции.Имя = "Подсистемы" Тогда
- ДобавитьСвойстваОбъектовМетаданных(ОбъектМетаданных.Подсистемы, СвойстваКоллекции, СвойстваОбъектовМетаданных, ПредустановленныеИдентификаторы, ПолноеИмя, НоваяСтрока.ПолныйСиноним + ". ");
+ ДобавитьСвойстваОбъектовМетаданных(
+ ОбъектМетаданных.Подсистемы,
+ СвойстваКоллекции,
+ СвойстваОбъектовМетаданных,
+ ПолноеИмя,
+ НоваяСтрока.ПолныйСиноним + ". ");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
-Функция ПредставлениеОбъектаМетаданных(Знач ОбъектМетаданных, Знач СвойстваКоллекции);
+Функция ПредставлениеОбъектаМетаданных(Знач ОбъектМетаданных, Знач СвойстваКоллекции)
Постфикс = "(" + СвойстваКоллекции.СинонимВЕдЧисле + ")";
@@ -808,6 +806,7 @@
Строка.ИмяВЕдЧисле = "Роль";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Роль'");
Строка.БезДанных = Истина;
+ Строка.БезКлючаОбъектаМетаданных = Истина;
// ПланыОбмена
Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить();
@@ -917,18 +916,19 @@
Строка.ИмяВЕдЧисле = "Задача";
Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'");
- // Заполнение дополнительных свойств
+ // Заполнение дополнительных свойств.
СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных");
+
Для каждого Строка Из СвойстваКоллекцийОбъектовМетаданных Цикл
Попытка
Строка.ИдентификаторКоллекции = СправочникМенеджер[Строка.Имя];
Исключение
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Не найден идентификатор коллекции
- |объектов метаданных ""%1"".
+ НСтр("ru = 'Не найден идентификатор типа объектов метаданных
+ |""%1"".
|
|Следует добавить предопределенный элемент в
- |Справочник.ИдентификаторыОбъектовМетаданных.'"),
+ |Справочник ""Идентификаторы объектов метаданных"".'"),
Строка.Имя);
КонецПопытки;
Строка.ПорядокКоллекции = СвойстваКоллекцийОбъектовМетаданных.Индекс(Строка);
@@ -940,523 +940,18 @@
КонецФункции
-Функция ПараметрыОбработчикаСобытия()
+Функция ВставитьЗнакВопроса(Знач Строка)
- Свойства = Новый Структура;
- Свойства.Вставить("Старые", СвойстваИдентификатораОбъектаМетаданных());
- Свойства.Вставить("Новые", СвойстваИдентификатораОбъектаМетаданных());
- Свойства.Вставить("СтандартнаяЗаменаСсылок", Ложь);
+ Если Лев(Строка, 1) <> "?" Тогда
+ Если Лев(Строка, 1) <> " " Тогда
+ Строка = "? " + Строка;
+ Иначе
+ Строка = "?" + Строка;
+ КонецЕсли;
+ КонецЕсли;
- Возврат Свойства;
+ Возврат Строка;
КонецФункции
-Функция СвойстваИдентификатораОбъектаМетаданных()
-
- Свойства = Новый Структура;
- Свойства.Вставить("Ссылка", ПустаяСсылка());
- Свойства.Вставить("Родитель", ПустаяСсылка());
- Свойства.Вставить("Имя", "");
- Свойства.Вставить("Синоним", "");
- Свойства.Вставить("ПолноеИмя", "");
- Свойства.Вставить("ПолныйСиноним", "");
- Свойства.Вставить("БезДанных", Ложь);
-
- Возврат Свойства;
-
-КонецФункции
-
-Процедура ВызватьИсключениеОшибкиЗаполненияПредустановленныхИдентификаторов(Знач ПредустановленныеИдентификаторы, Знач СвойстваКоллекцийОбъектовМетаданных)
-
- ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПредустановленныеИдентификаторы[0].ПолноеИмя);
-
- Если ОбъектМетаданных = Неопределено Тогда
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить-
- |ПредустановленныеИдентификаторыОбъектовМетаданных()
- |
- |Идентификатор ""%1"" задан
- |для несуществующего объекта метаданных
- |""%2"".'"),
- ПредустановленныеИдентификаторы[0].Идентификатор.УникальныйИдентификатор(),
- ПредустановленныеИдентификаторы[0].ПолноеИмя);
- Иначе
- ИмяКоллецииВЕдЧисле = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПредустановленныеИдентификаторы[0].ПолноеИмя, ".")[0];
- ОписаниеКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяКоллецииВЕдЧисле, "ИмяВЕдЧисле");
-
- Если ОписаниеКоллекции = Неопределено Тогда
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить-
- |ПредустановленныеИдентификаторыОбъектовМетаданных()
- |
- |Для объекта метаданных
- |""%1""
- |задан идентификатор ""%2"",
- |но для объектов метаданных типа ""%3""
- |идентификаторы не поддерживаются.'"),
- ПредустановленныеИдентификаторы[0].ПолноеИмя,
- ПредустановленныеИдентификаторы[0].Идентификатор.УникальныйИдентификатор(),
- ИмяКоллецииВЕдЧисле);
- КонецЕсли;
-
- ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить-
- |ПредустановленныеИдентификаторыОбъектовМетаданных()
- |
- |Для объекта метаданных
- |""%1""
- |задан идентификатор ""%2"",
- |но для его использования требуется, чтобы были заданы
- |идентификаторы для всех вышестоящих объектов метаданных.'"),
- ПредустановленныеИдентификаторы[0].ПолноеИмя,
- ПредустановленныеИдентификаторы[0].Идентификатор.УникальныйИдентификатор() );
- КонецЕсли;
-
-КонецПроцедуры
-
-////////////////////////////////////////////////////////////////////////////////
-// Процедуры и функции замены идентификатора в базе данных
-
-Процедура ЗаменитьСсылкуВИнформационнойБазе(СтараяСсылка, НоваяСсылка)
-
- МассивСсылок = Новый Массив;
- МассивСсылок.Добавить(СтараяСсылка);
-
- НайденныеДанные = НайтиПоСсылкам(МассивСсылок);
-
- НайденныеДанные.Колонки[0].Имя = "Ссылка";
- НайденныеДанные.Колонки[1].Имя = "Данные";
- НайденныеДанные.Колонки[2].Имя = "Метаданные";
- НайденныеДанные.Колонки.Добавить("Включено");
- НайденныеДанные.ЗаполнитьЗначения(Истина, "Включено");
-
- Заменяемые = Новый Соответствие;
- Заменяемые.Вставить(СтараяСсылка, НоваяСсылка);
-
- ВыполнитьЗаменуЭлементов(Заменяемые, НайденныеДанные, Истина);
-
-КонецПроцедуры
-
-// Функция из универсальной обработки ПоискИЗаменаЗначений
-// Изменения:
-// - удалена работа с формой прогрессора
-// - удалена процедура ОбработкаПрерыванияПользователя()
-// - заменено РегистрыСведений[СтрокаТаблицы.Метаданные.Имя] на
-// ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя())
-//
-Функция ВыполнитьЗаменуЭлементов(Знач Заменяемые, Знач ТаблицаСсылок, Знач ОтключатьКонтрольЗаписи = Ложь, Знач ВыполнятьВТранзакции = Ложь)
-
- Параметры = Новый Структура;
-
- Для Каждого РегистрБухгалтерии ИЗ Метаданные.РегистрыБухгалтерии Цикл
- Параметры.Вставить(РегистрБухгалтерии.Имя + "Субконто", РегистрБухгалтерии.ПланСчетов.МаксКоличествоСубконто);
- Параметры.Вставить(РегистрБухгалтерии.Имя + "Корреспонденция", РегистрБухгалтерии.Корреспонденция);
- КонецЦикла;
-
- Параметры.Вставить("Объект", Неопределено);
-
- ОбрабатываемаяСсылка = Неопределено;
- БылиИсключения = Ложь;
-
- Если ВыполнятьВТранзакции Тогда
- НачатьТранзакцию();
- КонецЕсли;
-
- Попытка
- Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл
- Если Не СтрокаТаблицы.Включено Тогда
- Продолжить;
- КонецЕсли;
- ПравильныйЭлемент = Заменяемые[СтрокаТаблицы.Ссылка];
-
- Ссылка = СтрокаТаблицы.Ссылка;
-
- Если ОбрабатываемаяСсылка <> СтрокаТаблицы.Данные Тогда
- Если ОбрабатываемаяСсылка <> Неопределено и Параметры.Объект <> Неопределено Тогда
-
- Если ОтключатьКонтрольЗаписи Тогда
- Параметры.Объект.ОбменДанными.Загрузка = Истина;
- КонецЕсли;
-
- Попытка
- Параметры.Объект.Записать();
- Исключение
- БылиИсключения = Истина;
- Если ВыполнятьВТранзакции Тогда
- ВызватьИсключение;
- КонецЕсли;
- СообщитьОбОшибке(ИнформацияОбОшибке());
- КонецПопытки;
- Параметры.Объект = Неопределено;
- КонецЕсли;
- ОбрабатываемаяСсылка = СтрокаТаблицы.Данные;
- КонецЕсли;
-
- Если Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
-
- Если Параметры.Объект = Неопределено Тогда
- Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
- КонецЕсли;
-
- Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
- Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
- Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
- КонецЕсли;
- КонецЦикла;
-
- Для Каждого ТабличнаяЧасть ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
- Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
- Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
- СтрокаТабличнойЧасти = Параметры.Объект[ТабличнаяЧасть.Имя].Найти(Ссылка, Реквизит.Имя);
- Пока СтрокаТабличнойЧасти <> Неопределено Цикл
- СтрокаТабличнойЧасти[Реквизит.Имя] = ПравильныйЭлемент;
- СтрокаТабличнойЧасти = Параметры.Объект[ТабличнаяЧасть.Имя].Найти(Ссылка, Реквизит.Имя);
- КонецЦикла;
- КонецЕсли;
- КонецЦикла;
- КонецЦикла;
-
- Для Каждого Движение ИЗ СтрокаТаблицы.Метаданные.Движения Цикл
-
- ЭтоДвижениеРегистраБухгалтерии = Метаданные.РегистрыБухгалтерии.Содержит(Движение);
- ЕстьКорреспонденция = ЭтоДвижениеРегистраБухгалтерии и Параметры[Движение.Имя + "Корреспонденция"];
-
- НаборЗаписей = Параметры.Объект.Движения[Движение.Имя];
- НаборЗаписей.Прочитать();
- НадоЗаписывать = Ложь;
- ТаблицаНабора = НаборЗаписей.Выгрузить();
-
- Если ТаблицаНабора.Количество() = 0 Тогда
- Продолжить;
- КонецЕсли;
-
- ИменаКолонок = Новый Массив;
-
- // Получим имена измерений, которые могут содержать ссылку
- Для Каждого Измерение ИЗ Движение.Измерения Цикл
-
- Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
-
- Если ЭтоДвижениеРегистраБухгалтерии Тогда
-
- Если Измерение.ПризнакУчета <> Неопределено Тогда
-
- ИменаКолонок.Добавить(Измерение.Имя + "Дт");
- ИменаКолонок.Добавить(Измерение.Имя + "Кт");
- Иначе
- ИменаКолонок.Добавить(Измерение.Имя);
- КонецЕсли;
- Иначе
- ИменаКолонок.Добавить(Измерение.Имя);
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
-
- // Получим имена ресурсов, которые могут содержать ссылку
- Если Метаданные.РегистрыСведений.Содержит(Движение) Тогда
- Для Каждого Ресурс ИЗ Движение.Ресурсы Цикл
- Если Ресурс.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
- ИменаКолонок.Добавить(Ресурс.Имя);
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- // Получим имена ресурсов, которые могут содержать ссылку
- Для Каждого Реквизит ИЗ Движение.Реквизиты Цикл
- Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
- ИменаКолонок.Добавить(Реквизит.Имя);
- КонецЕсли;
- КонецЦикла;
-
- // Произведем замены в таблице
- Для Каждого ИмяКолонки Из ИменаКолонок Цикл
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, ИмяКолонки);
- Пока СтрокаТабЧасти <> Неопределено Цикл
- СтрокаТабЧасти[ИмяКолонки] = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, ИмяКолонки);
- КонецЦикла;
- КонецЦикла;
-
- Если Метаданные.РегистрыБухгалтерии.Содержит(Движение) Тогда
-
- Для ИндексСубконто = 1 по Параметры[Движение.Имя + "Субконто"] Цикл
- Если ЕстьКорреспонденция Тогда
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто);
- Пока СтрокаТабЧасти <> Неопределено Цикл
- СтрокаТабЧасти["СубконтоДт"+ИндексСубконто] = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто);
- КонецЦикла;
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто);
- Пока СтрокаТабЧасти <> Неопределено Цикл
- СтрокаТабЧасти["СубконтоКт"+ИндексСубконто] = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто);
- КонецЦикла;
- Иначе
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто);
- Пока СтрокаТабЧасти <> Неопределено Цикл
- СтрокаТабЧасти["Субконто"+ИндексСубконто] = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто);
- КонецЦикла;
- КонецЕсли;
- КонецЦикла;
-
- Если Ссылка.Метаданные() = Движение.ПланСчетов Тогда
- Для Каждого СтрокаТабЧасти Из ТаблицаНабора Цикл
- Если ЕстьКорреспонденция Тогда
- Если СтрокаТабЧасти.СчетДт = Ссылка Тогда
- СтрокаТабЧасти.СчетДт = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- КонецЕсли;
- Если СтрокаТабЧасти.СчетКт = Ссылка Тогда
- СтрокаТабЧасти.СчетКт = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- КонецЕсли;
- Иначе
- Если СтрокаТабЧасти.Счет = Ссылка Тогда
- СтрокаТабЧасти.Счет = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
- Если Метаданные.РегистрыРасчета.Содержит(Движение) Тогда
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "ВидРасчета");
- Пока СтрокаТабЧасти <> Неопределено Цикл
- СтрокаТабЧасти["ВидРасчета"] = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "ВидРасчета");
- КонецЦикла;
- КонецЕсли;
-
- Если НадоЗаписывать Тогда
- НаборЗаписей.Загрузить(ТаблицаНабора);
- Если ОтключатьКонтрольЗаписи Тогда
- НаборЗаписей.ОбменДанными.Загрузка = Истина;
- КонецЕсли;
- Попытка
- НаборЗаписей.Записать();
- Исключение
- БылиИсключения = Истина;
- Если ВыполнятьВТранзакции Тогда
- ВызватьИсключение;
- КонецЕсли;
- СообщитьОбОшибке(ИнформацияОбОшибке());
- КонецПопытки;
- КонецЕсли;
- КонецЦикла;
-
- Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл
- Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда
- НадоЗаписывать = Ложь;
- НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей();
- НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные);
- НаборЗаписи.Прочитать();
-
- Если НаборЗаписи.Количество() > 0 Тогда
- Для Каждого Измерение ИЗ Последовательность.Измерения Цикл
- Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) И НаборЗаписи[0][Измерение.Имя]=Ссылка Тогда
- НаборЗаписи[0][Измерение.Имя] = ПравильныйЭлемент;
- НадоЗаписывать = Истина;
- КонецЕсли;
- КонецЦикла;
- Если НадоЗаписывать Тогда
- Если ОтключатьКонтрольЗаписи Тогда
- НаборЗаписи.ОбменДанными.Загрузка = Истина;
- КонецЕсли;
- Попытка
- НаборЗаписи.Записать();
- Исключение
- БылиИсключения = Истина;
- Если ВыполнятьВТранзакции Тогда
- ВызватьИсключение;
- КонецЕсли;
- СообщитьОбОшибке(ИнформацияОбОшибке());
- КонецПопытки;
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
-
- ИначеЕсли Метаданные.Справочники.Содержит(СтрокаТаблицы.Метаданные) Тогда
-
- Если Параметры.Объект = Неопределено Тогда
- Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
- КонецЕсли;
-
- Если СтрокаТаблицы.Метаданные.Владельцы.Содержит(Ссылка.Метаданные()) И Параметры.Объект.Владелец = Ссылка Тогда
- Параметры.Объект.Владелец = ПравильныйЭлемент;
- КонецЕсли;
-
- Если СтрокаТаблицы.Метаданные.Иерархический И Параметры.Объект.Родитель = Ссылка Тогда
- Параметры.Объект.Родитель = ПравильныйЭлемент;
- КонецЕсли;
-
- Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
- Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
- Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
- КонецЕсли;
- КонецЦикла;
-
- Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
- Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
- Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
- СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
- Пока СтрокаТабЧасти <> Неопределено Цикл
- СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
- СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
- КонецЦикла;
- КонецЕсли;
- КонецЦикла;
- КонецЦикла;
-
- ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(СтрокаТаблицы.Метаданные)
- ИЛИ Метаданные.ПланыСчетов.Содержит (СтрокаТаблицы.Метаданные)
- ИЛИ Метаданные.ПланыВидовРасчета.Содержит (СтрокаТаблицы.Метаданные)
- ИЛИ Метаданные.Задачи.Содержит (СтрокаТаблицы.Метаданные)
- ИЛИ Метаданные.БизнесПроцессы.Содержит (СтрокаТаблицы.Метаданные) Тогда
-
- Если Параметры.Объект = Неопределено Тогда
- Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект();
- КонецЕсли;
-
- Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
- Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда
- Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент;
- КонецЕсли;
- КонецЦикла;
-
- Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
- Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
- Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
- СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
- Пока СтрокаТабЧасти <> Неопределено Цикл
- СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент;
- СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
- КонецЦикла;
- КонецЕсли;
- КонецЦикла;
- КонецЦикла;
-
- ИначеЕсли Метаданные.Константы.Содержит(СтрокаТаблицы.Метаданные) Тогда
-
- Константы[СтрокаТаблицы.Метаданные.Имя].Установить(ПравильныйЭлемент);
-
- ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда
-
- СтруктураИзмерений = Новый Структура;
- НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()).СоздатьНаборЗаписей();
- Для Каждого Измерение ИЗ СтрокаТаблицы.Метаданные.Измерения Цикл
- НаборЗаписей.Отбор[Измерение.Имя].Установить(СтрокаТаблицы.Данные[Измерение.Имя]);
- СтруктураИзмерений.Вставить(Измерение.Имя);
- КонецЦикла;
- Если СтрокаТаблицы.Метаданные.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
- НаборЗаписей.Отбор["Период"].Установить(СтрокаТаблицы.Данные.Период);
- КонецЕсли;
- НаборЗаписей.Прочитать();
-
- Если НаборЗаписей.Количество() = 0 Тогда
- Продолжить;
- КонецЕсли;
-
- ТаблицаНабора = НаборЗаписей.Выгрузить();
- НаборЗаписей.Очистить();
-
- Если ОтключатьКонтрольЗаписи Тогда
- НаборЗаписей.ОбменДанными.Загрузка = Истина;
- КонецЕсли;
-
-
- Если Не ВыполнятьВТранзакции Тогда
- НачатьТранзакцию();
- КонецЕсли;
-
- Попытка
- НаборЗаписей.Записать();
-
- Для Каждого Колонка ИЗ ТаблицаНабора.Колонки Цикл
- Если ТаблицаНабора[0][Колонка.Имя] = Ссылка Тогда
- ТаблицаНабора[0][Колонка.Имя] = ПравильныйЭлемент;
- Если СтруктураИзмерений.Свойство(Колонка.Имя) Тогда
- НаборЗаписей.Отбор[Колонка.Имя].Установить(ПравильныйЭлемент);
- КонецЕсли;
-
- КонецЕсли;
- КонецЦикла;
-
- НаборЗаписей.Загрузить(ТаблицаНабора);
-
- НаборЗаписей.Записать();
-
- Если Не ВыполнятьВТранзакции Тогда
- ЗафиксироватьТранзакцию();
- КонецЕсли;
-
- Исключение
- БылиИсключения = Истина;
- Если ВыполнятьВТранзакции Тогда
- ВызватьИсключение;
- КонецЕсли;
- ОтменитьТранзакцию();
- СообщитьОбОшибке(ИнформацияОбОшибке());
- КонецПопытки;
- Иначе
- СообщитьОбОшибке(НСтр("ru = 'Значения не заменяются в данных типа'") + ": " + СтрокаТаблицы.Метаданные);
- КонецЕсли;
- КонецЦикла;
-
- Если Параметры.Объект <> Неопределено Тогда
- Если ОтключатьКонтрольЗаписи Тогда
- Параметры.Объект.ОбменДанными.Загрузка = Истина;
- КонецЕсли;
- Попытка
- Параметры.Объект.Записать();
- Исключение
- БылиИсключения = Истина;
- Если ВыполнятьВТранзакции Тогда
- ВызватьИсключение;
- КонецЕсли;
- СообщитьОбОшибке(ИнформацияОбОшибке());
- КонецПопытки;
- КонецЕсли;
-
- Если ВыполнятьВТранзакции Тогда
- ЗафиксироватьТранзакцию();
- КонецЕсли;
- Исключение
- БылиИсключения = Истина;
- Если ВыполнятьВТранзакции Тогда
- ОтменитьТранзакцию();
- КонецЕсли;
- СообщитьОбОшибке(ИнформацияОбОшибке());
- КонецПопытки;
-
- Возврат Не БылиИсключения;
-
-КонецФункции
-
-// Процедура из универсальной обработки ПоискИЗаменаЗначений
-// Изменения:
-// - заменен метод Сообщить(...) на ЗаписьЖурналаРегистрации(...)
-//
-Процедура СообщитьОбОшибке(Знач Описание)
-
- Если ТипЗнч(Описание) = Тип("ИнформацияОбОшибке") Тогда
- Описание = ?(Описание.Причина = Неопределено, Описание, Описание.Причина).Описание;
- КонецЕсли;
-
- ЗаписьЖурналаРегистрации(
- НСтр("ru = 'Идентификаторы объектов метаданных. Замена идентификатора'"),
- УровеньЖурналаРегистрации.Ошибка,
- ,
- ,
- Описание,
- РежимТранзакцииЗаписиЖурналаРегистрации.Независимая);
-
-КонецПроцедуры
-
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl
index 2a0150764..7f873e7d4 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl
@@ -1,12 +1,7 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
-// Обработчик события ПередЗаписью предотвращает изменение идентификаторов
-// объектов метаданных для которых допустимо только предусмотренное
-// обновление на основе метаданных конфигурации с помощью
-// процедуры:
-//
-// Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника()
-//
+// Предотвращает недопустимое изменение идентификаторов объектов метаданных.
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
@@ -15,35 +10,50 @@
Если НЕ ДополнительныеСвойства.Свойство("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника") Тогда
- ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"".
- |
- |Изменение идентификаторов объектов метаданных выполняется
- |- либо автоматически с помощью процедуры
- | Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(),
- |- либо вручную через конфигуратор (добавление/удаление предопределенных элементов).
- |
- |Допустимо удаление неиспользуемых элементов, помеченных на удаление.'"));
+ Если ЭтоНовый() Тогда
+
+ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"".
+ |
+ |Создание нового идентификатора объекта метаданных
+ |возможно только автоматически при обновлении данных справочника.'"),
+ ПолноеИмя);
+
+ ИначеЕсли Справочники.ИдентификаторыОбъектовМетаданных.ЗапрещеноИзменятьПолноеИмя(ЭтотОбъект) Тогда
+
+ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"".
+ |
+ |При изменении идентификатора объекта метаданных указано
+ |полное имя ""%1"", которое может быть
+ |установлено только автоматически при обновлении данных справочника.'"),
+ ПолноеИмя);
+
+ ИначеЕсли Справочники.ИдентификаторыОбъектовМетаданных.ПолноеИмяИспользуется(ПолноеИмя, Ссылка) Тогда
+
+ ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"".
+ |
+ |При изменении идентификатора объекта метаданных указано
+ |полное имя ""%1"",
+ |которое уже используется в справочнике.'"),
+ ПолноеИмя);
+
+ КонецЕсли;
+
+ Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьСвойстваИдентификатора(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
-
-// Обработчик события ПередУдалением предотвращает удаление идентификаторов
-// объектов метаданных, у которых значение реквизита "Используются" установлено Истина
-// или значение реквизита "ПометкаУдаления" установлено Ложь.
-//
+// Предотвращает удаление идентификаторов объектов метаданных не помеченных на удаление.
Процедура ПередУдалением(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
- Если Используется Тогда
- ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"".
- |
- |Удаление идентификаторов объектов метаданных, у которых значение
- |реквизита ""Используется"" установлено Истина недопустимо.'"));
- ИначеЕсли НЕ ПометкаУдаления Тогда
+ Если НЕ ПометкаУдаления Тогда
ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"".
|
|Удаление идентификаторов объектов метаданных, у которых значение
@@ -52,3 +62,5 @@
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo
index b8824e0b7..c2b200cd6 100644
--- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo
+++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo
@@ -125,98 +125,8 @@
VariableAsDescription
-
- Задачи
-
-
-
-
-
- БизнесПроцессы
-
-
-
-
-
- РегистрыРасчета
-
-
-
-
-
- РегистрыБухгалтерии
-
-
-
-
-
- ПланыВидовРасчета
-
-
-
-
-
- ПланыСчетов
-
-
-
-
-
- ПланыВидовХарактеристик
-
-
-
-
-
- Обработки
-
-
-
-
-
- Отчеты
-
-
-
-
-
- Справочники
-
-
-
-
-
- Роли
-
-
-
-
- Роль_ПолныеПрава
-
-
-
-
-
-
- РегистрыСведений
-
-
-
-
-
- РегистрыНакопления
-
-
-
-
-
- Подсистемы
-
-
-
-
-
- ПланыОбмена
+
+ Документы
@@ -227,8 +137,92 @@
-
- Документы
+
+ ПланыОбмена
+
+
+
+
+
+ Подсистемы
+
+
+
+
+
+ РегистрыНакопления
+
+
+
+
+
+ РегистрыСведений
+
+
+
+
+
+ Роли
+
+
+
+
+
+ Справочники
+
+
+
+
+
+ Отчеты
+
+
+
+
+
+ Обработки
+
+
+
+
+
+ ПланыВидовХарактеристик
+
+
+
+
+
+ ПланыСчетов
+
+
+
+
+
+ ПланыВидовРасчета
+
+
+
+
+
+ РегистрыБухгалтерии
+
+
+
+
+
+ РегистрыРасчета
+
+
+
+
+
+ БизнесПроцессы
+
+
+
+
+
+ Задачи
@@ -238,7 +232,7 @@
BothWaysCatalog.ИдентификаторыОбъектовМетаданных.Form.ФормаЭлементаCatalog.ИдентификаторыОбъектовМетаданных.Form.ФормаСписка
- Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаВыбора
+ Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаСпискаПорядокКоллекции
@@ -417,25 +411,6 @@
Use
-
- Используется
-
- ru
- Используется
-
-
- Boolean
-
-
- ru
- Идентификатору соответстует объект метаданных
-
-
-
-
- Use
- Use
- ФормаСписка
@@ -454,13 +429,4 @@
PersonalComputerMobileDevice
-
- ФормаВыбора
-
- ru
- Форма выбора
-
- PersonalComputer
- MobileDevice
-
diff --git a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form
index 6b52acaff..fa0781cd0 100644
--- a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form
+++ b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form
@@ -481,7 +481,6 @@
LockOwnertrue
- truetrueVerticaltrue
diff --git a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl
index 437ee513a..dfc63f6b8 100644
--- a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl
+++ b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl
@@ -4,6 +4,8 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+ Заголовок = НСтр("ru = 'Настройка заполнения календаря'");
+
ПропуститьВыборПроизводственногоКалендаря = Ложь;
ЗаполнитьСписокПроизодственныхКалендарей(ПропуститьВыборПроизводственногоКалендаря);
diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form
index 66baac7fc..bd1fe8004 100644
--- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form
+++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form
@@ -261,6 +261,10 @@
NotificationProcessingОбработкаОповещения
+
+ OnCreateAtServer
+ ПриСозданииНаСервере
+ DontBlocktruetrue
diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl
index ca084b1d5..e21934e37 100644
--- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl
@@ -1,6 +1,15 @@
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
+&НаСервере
+Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+
+ Если Параметры.РежимВыбора Тогда
+ Элементы.Список.РежимВыбора = Истина;
+ КонецЕсли;
+
+КонецПроцедуры
+
&НаКлиенте
Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора)
@@ -34,6 +43,10 @@
&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
+ Если Группа Тогда
+ Возврат;
+ КонецЕсли;
+
Если НастройкаНовогоКалендаряПоУмолчанию() <> Неопределено Тогда
// Календарь по единственному шаблону уже создан,
// не нужно предлагать сделать это повторно
diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form
index 90efef765..e21205c42 100644
--- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form
@@ -338,6 +338,10 @@
Lefttrue
+
+ ChoiceProcessing
+ ОбработкаВыбора
+ OnOpenПриОткрытии
diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html
index 719779c40..f98f94ee9 100644
--- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html
+++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html
@@ -1,5 +1,6 @@
-
-
Команда Заполнить календарь в форме календаря позволяет автоматически заполнить календарь в соответствии с пятидневной рабочей неделей без учета праздничных дней за год.
-
Команда Заполнить по календарю позволяет заполнить новый календарь по данным другого календаря.
-
Для каждого календаря необходимо указать, какие дни являются в нем рабочими (выполняется двойным щелчком мышки по рабочему дню).
+
+
Команда Изменить позволяет отказаться от автоматического обновления календаря по данным производственного календаря и внести изменения.
+
Команда Обновить выполняет принудительное обновление календаря по данным производственного календаря, по шаблону которого он был создан.
+
Команда Заполнить по календарю позволяет заполнить новый календарь по данным производственного календаря, по шаблону которого он был создан.
+
Для каждого календаря необходимо указать, какие дни являются в нем рабочими (выполняется двойным щелчком мышки по рабочему дню).
При заполнении календаря необходимо предусмотреть следующее. При заполнении календаря, например на текущий год, необходимо заполнить его не только до конца текущего года, но предусмотреть заполнение на следующий год на период который позволит беспрепятственно использовать календарь в конфигурации в конце текущего года. Заполнять календарь, пользуясь этим принципом на следующий год нужно в конце текущего года.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl
index f2246daac..b5ab1db75 100644
--- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl
@@ -53,6 +53,23 @@
КонецПроцедуры
+&НаКлиенте
+Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора)
+
+ Если ТипЗнч(РезультатВыбора) <> Тип("Структура") Тогда
+ Возврат;
+ КонецЕсли;
+
+ РезультатВыбора.Свойство("ПроизводственныйКалендарь", Объект.ПроизводственныйКалендарь);
+ РезультатВыбора.Свойство("ВидКалендаря", Объект.ВидКалендаря);
+
+ // Производственный календарь теперь известен - можно заполнять
+ ЗаполнитьФормуПоОбъекту(Истина);
+
+ Элементы.Календарь.Обновить();
+
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ
@@ -96,9 +113,9 @@
СтрокаТаблицыРегистра = ТаблицаРегистра.НайтиПоЗначению(СтрокаОформленияПериода.Дата);
Если СтрокаТаблицыРегистра = Неопределено Тогда
- СтрокаОформленияПериода.ЦветТекста = WebЦвета.Красный;
+ СтрокаОформленияПериода.ЦветТекста = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняНеУказанЦвет");
Иначе
- СтрокаОформленияПериода.ЦветТекста = WebЦвета.Черный;
+ СтрокаОформленияПериода.ЦветТекста = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняРабочийЦвет");
КонецЕсли;
КонецЦикла;
@@ -133,6 +150,14 @@
&НаКлиенте
Процедура ЗаполнитьПоКалендарю(Команда)
+ Если Не ЗначениеЗаполнено(Объект.ПроизводственныйКалендарь)
+ Или Не ЗначениеЗаполнено(Объект.ВидКалендаря) Тогда
+ // Производственный календарь не указан, пытаемся уточнить у пользователя способ заполнения
+ ОткрытьФорму("Справочник.Календари.Форма.НастройкаНовогоКалендаря", , ЭтаФорма);
+ Возврат;
+ КонецЕсли;
+
+ // Производственный календарь указан, а значит известно как заполнять
ЗаполнитьФормуПоОбъекту(Истина);
Элементы.Календарь.Обновить();
@@ -213,7 +238,6 @@
Элементы.ЗаполнитьПоКалендарю.Доступность = Ложь;
Иначе
СпособРедактированияПоясняющийТекст = НСтр("ru = 'Для редактирования рабочих и выходных дней календаря используйте двойной щелчок левой кнопкой мыши'");
- Элементы.ЗаполнитьПоКалендарю.Доступность = ЗначениеЗаполнено(Объект.ПроизводственныйКалендарь) И ЗначениеЗаполнено(Объект.ВидКалендаря);
КонецЕсли;
КонецПроцедуры
@@ -224,7 +248,7 @@
Если НомерТекущегоГода = 0 Тогда
НомерТекущегоГода = Год(ТекущаяДатаСеанса());
КонецЕсли;
- НомерПредыдущегоГода = НомерТекущегоГода;
+ НомерПредыдущегоГода = НомерТекущегоГода;
Элементы.Календарь.НачалоПериодаОтображения = Дата(НомерТекущегоГода, 1, 1);
Элементы.Календарь.КонецПериодаОтображения = Дата(НомерТекущегоГода, 12, 31);
diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl
index 8ad8688b5..0d13971c1 100644
--- a/SSL/src/Catalogs/Календари/ManagerModule.bsl
+++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
@@ -70,3 +72,5 @@
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/Календари/Календари.mdo b/SSL/src/Catalogs/Календари/Календари.mdo
index 57480bd5f..5f14f7ab6 100644
--- a/SSL/src/Catalogs/Календари/Календари.mdo
+++ b/SSL/src/Catalogs/Календари/Календари.mdo
@@ -126,6 +126,7 @@
BothWaysCatalog.Календари.Form.ФормаЭлементаCatalog.Календари.Form.ФормаСписка
+ Catalog.Календари.Form.ФормаСпискаПроизводственныйКалендарь
diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form
index 660b5622f..1d3ac70eb 100644
--- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form
+++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form
@@ -11,7 +11,7 @@
СтраницаВыборИсточника6
- КодВариантаЗагрузки
+ ВариантЗагрузки7truetrue
@@ -19,12 +19,12 @@
true
- КодВариантаЗагрузки
+ ВариантЗагрузкиTop
- КодВариантаЗагрузкиРасширеннаяПодсказка
- 18
+ ВариантЗагрузкиРасширеннаяПодсказка
+ 26Labeltruetrue
@@ -33,7 +33,7 @@
- КодВариантаЗагрузкиКонтекстноеМеню
+ ВариантЗагрузкиКонтекстноеМеню8true
@@ -49,8 +49,8 @@
ruс диска "Информационно-технологическое сопровождение"
-
- 1
+
+ ИТС
@@ -58,8 +58,8 @@
ruс сайта агентства "РосБизнесКонсалтинг"
-
- 2
+
+ РБКVertical
@@ -80,7 +80,178 @@
СтраницаВыборИсточникаРасширеннаяПодсказка
- 17
+ 25
+ Label
+ true
+ true
+
+ Left
+
+
+ Page
+
+ Vertical
+ auto
+
+
+
+ ВыполняетсяЗагрузка
+ 15
+
+ КартинкаВыполняетсяЗагрузка
+ 16
+
+ ru
+ Картинка выполняется загрузка
+
+ true
+ true
+
+ true
+
+
+ КартинкаВыполняетсяЗагрузкаРасширеннаяПодсказка
+ 29
+ Label
+ true
+ true
+
+ Left
+
+
+
+ КартинкаВыполняетсяЗагрузкаКонтекстноеМеню
+ 17
+ true
+
+ 7
+ true
+ 3
+ true
+
+
+ CommonPicture.ДлительнаяОперация48
+
+
+
+
+ НадписьВыполняетсяЗагрузка
+ 18
+
+ ru
+ Выполняется загрузка классификатора...
+
+ true
+ true
+
+ true
+
+
+ НадписьВыполняетсяЗагрузкаРасширеннаяПодсказка
+ 30
+ Label
+ true
+ true
+
+ Left
+
+
+
+ НадписьВыполняетсяЗагрузкаКонтекстноеМеню
+ 19
+ true
+
+ Label
+ true
+ 3
+ true
+
+ Left
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Выполняется загрузка
+
+
+ ru
+ Выполняется загрузка
+
+
+ ВыполняетсяЗагрузкаРасширеннаяПодсказка
+ 28
+ Label
+ true
+ true
+
+ Left
+
+
+ Page
+
+ auto
+
+
+
+ ЗагрузкаССайтаРБК
+ 12
+
+ ПредупреждениеОЗагрузкаССайтаРБК
+ 13
+
+ ru
+ Загрузка классификатора банков РФ будет выполнена с сайта Российского информационного агентства РБК (http://www.rbc.ru).
+
+Для продолжения нажмите "Далее".
+
+ true
+ true
+
+ true
+
+
+ ПредупреждениеОЗагрузкаССайтаРБКРасширеннаяПодсказка
+ 32
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ПредупреждениеОЗагрузкаССайтаРБККонтекстноеМеню
+ 14
+ true
+
+ Label
+ true
+ true
+
+ Left
+
+
+ true
+ true
+
+ true
+
+
+ ru
+ Загрузка с сайта РБК
+
+
+ ru
+ Загрузка с сайта РБК
+
+
+ ЗагрузкаССайтаРБКРасширеннаяПодсказка
+ 31Labeltruetrue
@@ -111,7 +282,7 @@
ПоясняющийТекстРасширеннаяПодсказка
- 21
+ 34Labeltruetrue
@@ -132,11 +303,10 @@
truetrue
- Style.ПоясняющийТекст
+ Style.FormTextColorLeft
- Toptrue
@@ -154,7 +324,7 @@
СтраницаРезультатРасширеннаяПодсказка
- 20
+ 33Labeltruetrue
@@ -183,7 +353,7 @@
СтраницыФормыРасширеннаяПодсказка
- 16
+ 24Labeltruetrue
@@ -211,7 +381,7 @@
ФормаКнопкаНазадРасширеннаяПодсказка
- 12
+ 20Labeltruetrue
@@ -237,7 +407,7 @@
ФормаКнопкаДалееРасширеннаяПодсказка
- 13
+ 21Labeltruetrue
@@ -263,7 +433,7 @@
ФормаКнопкаОтменаРасширеннаяПодсказка
- 14
+ 22Labeltruetrue
@@ -271,7 +441,7 @@
Left
- Form.StandardCommand.Cancel
+ Form.Command.ОтменаNormalAutotrue
@@ -289,7 +459,7 @@
ФормаКнопкаСправкаРасширеннаяПодсказка
- 15
+ 23Labeltruetrue
@@ -307,11 +477,16 @@
Right
+
+ OnOpen
+ ПриОткрытии
+ OnCreateAtServerПриСозданииНаСервере
- DontBlock
+ 45
+ LockOwnertruetrueVertical
@@ -322,17 +497,50 @@
autotrue
- КодВариантаЗагрузки
+ ВариантЗагрузкиruВариант загрузки2
- Number
-
- 1
-
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ АдресХранилища
+
+ ru
+ Адрес хранилища
+
+ 1
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ ИдентификаторЗадания
+
+ ru
+ Идентификатор задания
+
+ 3
+
+ UUIDtrue
@@ -348,10 +556,6 @@
Далее >>1
-
- ru
- Далее
- true
@@ -370,10 +574,6 @@
<< Назад 2
-
- ru
- Назад
- true
@@ -385,6 +585,28 @@
AutoAuto
+
+ Отмена
+
+ ru
+ Отмена
+
+ 3
+
+ ru
+ Отмена
+
+
+ true
+
+
+
+ Отмена
+
+
+ Auto
+ Auto
+
diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl
index 85192454c..dcc7aaa2b 100644
--- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl
+++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl
@@ -1,25 +1,57 @@
+&НаКлиенте
+Перем ПараметрыОбработчикаОжидания;
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
+ // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
ВыполнитьПроверкуПравДоступа("Изменение", Метаданные.Справочники.КлассификаторБанковРФ);
- КодВариантаЗагрузки = 1;
+ ВариантЗагрузки = "РБК";
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриОткрытии(Отказ)
+ #Если ВебКлиент Тогда
+ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК;
+ #Иначе
+ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника;
+ #КонецЕсли
+
+ УстановитьИзмененияВИнтерфейсе();
КонецПроцедуры
-
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
&НаКлиенте
Процедура Далее(Команда)
- Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника Тогда
- ЗагрузитьКлассификатор();
- Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат;
- ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда
+ Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда
Закрыть();
+ Иначе
+ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка;
+ УстановитьИзмененияВИнтерфейсе();
+ ПодключитьОбработчикОжидания("ВыполнитьЗагрузкуКлассификатора", 0.1, Истина);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Назад(Команда)
+ ТекущаяСтраница = Элементы.СтраницыФормы.ТекущаяСтраница;
+
+ Если ТекущаяСтраница = Элементы.СтраницаРезультат Тогда
+ #Если ВебКлиент Тогда
+ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК;
+ #Иначе
+ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника;
+ #КонецЕсли
КонецЕсли;
УстановитьИзмененияВИнтерфейсе();
@@ -27,14 +59,11 @@
КонецПроцедуры
&НаКлиенте
-Процедура Назад(Команда)
-
- Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда
- Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника;
+Процедура Отмена(Команда)
+ Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда
+ ЗавершитьФоновоеЗадание(ИдентификаторЗадания);
КонецЕсли;
-
- УстановитьИзмененияВИнтерфейсе();
-
+ Закрыть();
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
@@ -51,11 +80,46 @@
// классификатора БИК РФ с диска ИТС, помещенный во временное хранилище
// Загружено - Число - Количество новых записей классификатора
// Обновлено - Число - Количество обновленных записей классификатора
-// ТекстСообщения - Строка - тест сообщения об ошибке
+// ТекстСообщения - Строка - тест сообщения о результатах загрузки
+// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора
&НаСервере
Процедура ЗагрузитьДанныеДискИТСНаСервере(ПараметрыЗагрузкиФайловИТС)
РаботаСБанками.ЗагрузитьДанныеДискИТС(ПараметрыЗагрузкиФайловИТС);
-КонецПроцедуры
+КонецПроцедуры
+
+
+// Загружает в классификатор банков данные с диска ИТС.
+//
+// Параметры
+// ПараметрыЗагрузкиФайловРБК - Соответствие:
+// ИмяДискаИТС - Строка - имя диска ИТС
+// ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - файл данных классификатора БИК РФ с диска ИТС,
+// помещенный во временное хранилище
+// ПодготовкаИТСАдресДвоичныхДанных - ВременноеХранилище - файл обработки подготовки данных
+// классификатора БИК РФ с диска ИТС, помещенный во временное хранилище
+// Загружено - Число - Количество новых записей классификатора
+// Обновлено - Число - Количество обновленных записей классификатора
+// ТекстСообщения - Строка - тест сообщения о результатах загрузки
+// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора
+&НаСервере
+Функция ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиФайловРБК)
+ Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
+ АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
+ РаботаСБанками.ПолучитьДанныеРБК(ПараметрыЗагрузкиФайловРБК, АдресХранилища);
+ Результат = Новый Структура("ЗаданиеВыполнено,АдресХранилища", Истина, АдресХранилища);
+ Иначе
+ НаименованиеЗадания = НСтр("ru = 'Загрузка классификатора банков РФ'");
+
+ Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
+ УникальныйИдентификатор,
+ "РаботаСБанками.ПолучитьДанныеРБК",
+ ПараметрыЗагрузкиФайловРБК,
+ НаименованиеЗадания);
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
// Загружает классификатор банков с диска ИТС или с сайта РБК.
//
@@ -66,39 +130,85 @@
ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0);
ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0);
ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", "");
+ ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Ложь);
- ВариантЗагрузки = "";
-
- Состояние(НСтр("ru ='Загружается классификатор банков РФ.'"));
-
- Если КодВариантаЗагрузки = 1 Тогда
- //с диска ИТС
- ВариантЗагрузки = НСтр("ru ='Диск ИТС'");
+ Если ВариантЗагрузки = "ИТС" Тогда
ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора);
- ИначеЕсли КодВариантаЗагрузки = 2 Тогда
- //с сайта РБК
- ВариантЗагрузки = НСтр("ru ='Сайт РБК'");
- РаботаСБанкамиВызовСервера.ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора);
+
+ АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
+ ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища);
+ Результат = Новый Структура("ЗаданиеВыполнено", Истина);
+ ИначеЕсли ВариантЗагрузки = "РБК" Тогда
+ Результат = ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиКлассификатора);
КонецЕсли;
+ АдресХранилища = Результат.АдресХранилища;
+ Если НЕ Результат.ЗаданиеВыполнено Тогда
+ ИдентификаторЗадания = Результат.ИдентификаторЗадания;
+
+ ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
+ ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина);
+ Иначе
+ ЗагрузитьРезультат();
+ КонецЕсли;
+ КонецПроцедуры
+
+//Отображает результат попытки загрузки классификатора банков РФ в журнале регистрации
+//и в форме загрузки
+&НаКлиенте
+Процедура ЗагрузитьРезультат()
+
+ Если ВариантЗагрузки = "ИТС" Тогда
+ Источник = НСтр("ru ='Диск ИТС'");
+ Иначе
+ Источник = НСтр("ru ='Сайт РБК'");
+ КонецЕсли;
+
+ ПараметрыЗагрузкиКлассификатора = ПолучитьИзВременногоХранилища(АдресХранилища);
+
ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru ='Загрузка классификатора банков. %1.'"), ВариантЗагрузки);
-
- Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда
- РаботаСБанкамиВызовСервера.ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора);
+ НСтр("ru ='Загрузка классификатора банков. %1.'"), Источник);
+
+ Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда
ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,,
- ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина);
+ ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина);
Иначе
ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,
- "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина);
+ "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина);
КонецЕсли;
Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"];
+ Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат;
+ УстановитьИзмененияВИнтерфейсе();
+
Если (ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0) или (ПараметрыЗагрузкиКлассификатора["Загружено"] > 0) Тогда
ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификаторБанковРФ"));
КонецЕсли;
-КонецПроцедуры
+КонецПроцедуры
+
+//Унифицированная процедура проверки выполнения фонового задания
+&НаКлиенте
+Процедура Подключаемый_ПроверитьВыполнениеЗадания()
+
+ Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда
+ ЗагрузитьРезультат();
+ Иначе
+ ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
+ ПодключитьОбработчикОжидания(
+ "Подключаемый_ПроверитьВыполнениеЗадания",
+ ПараметрыОбработчикаОжидания.ТекущийИнтервал,
+ Истина);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Функция ЗаданиеВыполнено(ИдентификаторЗадания)
+
+ Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
+
+КонецФункции
// Получает, сортирует, записывает данные классификатора БИК РФ с диска ИТС
//
@@ -106,7 +216,8 @@
// ПараметрыЗагрузкиКлассификатора - Соответствие:
// Загружено - Число - Количество новых записей классификатора
// Обновлено - Число - Количество обновленных записей классификатора
-// ТекстСообщения - Строка - тест сообщения об ошибке
+// ТекстСообщения - Строка - тест сообщения о результатах загрузки
+// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора
&НаКлиенте
Процедура ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора)
@@ -223,17 +334,37 @@
// В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя
//
-&НаКлиенте
+&НаСервере
Процедура УстановитьИзмененияВИнтерфейсе()
- Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника Тогда
+ Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника
+ Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК Тогда
Элементы.ФормаКнопкаНазад.Доступность = Ложь;
- Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Далее>>'");
+ Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Далее >>'");
Элементы.ФормаКнопкаОтмена.Доступность = Истина;
- ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда
+ Элементы.ФормаКнопкаДалее.Доступность = Истина;
+ ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка Тогда
+ Элементы.ФормаКнопкаНазад.Доступность = Ложь;
+ Элементы.ФормаКнопкаДалее.Доступность = Ложь;
+ Элементы.ФормаКнопкаОтмена.Доступность = Истина;
+ Иначе
Элементы.ФормаКнопкаНазад.Доступность = Истина;
- Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'");
+ Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'");
Элементы.ФормаКнопкаОтмена.Доступность = Ложь;
+ Элементы.ФормаКнопкаДалее.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
+
+&НаКлиенте
+Процедура ВыполнитьЗагрузкуКлассификатора()
+ ЗагрузитьКлассификатор();
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗавершитьФоновоеЗадание(ИдентификаторЗадания)
+ ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
+ Если ФоновоеЗадание <> Неопределено Тогда
+ ФоновоеЗадание.Отменить();
+ КонецЕсли;
+КонецПроцедуры
diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl
index 542019147..d2efe16c9 100644
--- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl
+++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl
@@ -15,7 +15,7 @@
&НаКлиенте
Процедура ЗагрузитьКлассификатор(Команда)
- ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора");
+ ОткрытьФормуМодально("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора");
КонецПроцедуры
diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl
index 5d02c6429..30a721b56 100644
--- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl
@@ -15,6 +15,6 @@
&НаКлиенте
Процедура ЗагрузитьКлассификатор(Команда)
- ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора");
+ ОткрытьФормуМодально("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора");
КонецПроцедуры
diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html
index fd77085ee..c0405c30e 100644
--- a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html
+++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В классификаторе банков РФ хранятся сведения о банках: БИК, корреспондентский счет, данные о местонахождении, телефоны для связи с сотрудниками, почтовый адрес банка. Эти сведения используются при заполнении реквизитов банковских счетов и в других объектах программы.
По команде Загрузить классификатор можно обновить сведения о банках с сайта РБК или из поставляемого на диске ИТС "Общероссийского классификатора банков" (ОКБ).
Также можно настроить обновление классификатора с сайта РБК автоматически по расписанию с помощью регламентного задания Загрузка классификатора банков РФ с сайта РБК.
Предопределенные элементы и группы справочника соответствуют объектам конфигурации, в которых можно использовать дополнительные реквизиты и сведения. Добавление новых элементов в форме списка невозможно.
Элемент содержит таблицу с набором дополнительных реквизитов, назначенных объекту, и таблицу с набором дополнительных сведений, назначенных объекту. Также на форме набора расположен список всех дополнительных реквизитов и сведений, уже существующих в ИБ. Добавить объекту новый дополнительный реквизит или сведение можно из этого списка командой Добавить в набор. Если в списке всех реквизитов и сведений нет требуемого объекту реквизита или сведения, его нужно создать командой Создать. В открывшейся форме необходимо указать что мы создаем — дополнительный реквизит или дополнительное сведение, указать наименование. Исходя из логики использования выбрать из списка тип значения дополнительного реквизита или сведения. При выборе типа значения Значения свойств объектов, можно задать список возможных значений дополнительного реквизита или сведения в списке Значения свойств объектов. Список открывается командой на панели навигации дополнительного реквизита или сведения.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl
index c9f75f1c0..9bc55b20d 100644
--- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl
@@ -1,3 +1,4 @@
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
@@ -10,70 +11,41 @@
КонецЕсли;
// Раздельная настройка дополнительных реквизитов и дополнительных сведений.
+ Элементы.ДополнительныеРеквизитыЗаполнятьОбязательно.Подсказка =
+ Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений.ТабличныеЧасти
+ .ДополнительныеРеквизиты.Реквизиты.ЗаполнятьОбязательно.Подсказка;
- Если Объект.Предопределенный Тогда
- Элементы.Наименование.ТолькоПросмотр = Истина;
+ Элементы.Наименование.ТолькоПросмотр = Истина;
+
+ Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
+ ЗаполнитьИспользованиеДополнительныхСвойств();
+ ЗаполнитьДополнительныеСвойстваВФорме();
КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+
+ // При записи свойства необходимо перенести свойство в соответствующую группу.
+ Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда
+ ПроверитьСоставыТаблицПослеЗаписиСвойства(Параметр.ЭтоДополнительноеСведение, Источник);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЧтенииНаСервере(ТекущийОбъект)
+
ЗаполнитьИспользованиеДополнительныхСвойств();
-
- Если НЕ ИспользоватьДопРеквизиты И НЕ ИспользоватьДопСведения Тогда
- Отказ = Истина;
- ВызватьИсключение НСтр("ru = 'Использование свойств не определено.'");
- КонецЕсли;
-
- Если НЕ ИспользоватьДопРеквизиты Тогда
- Элементы.ДополнительныеРеквизиты.Видимость = Ложь;
- Элементы.ДополнительныеСведения.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
-
- ИначеЕсли НЕ ИспользоватьДопСведения Тогда
- Элементы.ДополнительныеСведения.Видимость = Ложь;
- Элементы.ДополнительныеРеквизиты.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
- КонецЕсли;
-
- Если ИспользоватьДопРеквизиты Тогда
- Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл
- Если НЕ Строка.Свойство.ЭтоДополнительноеСведение Тогда
- ДополнительныеРеквизиты.Добавить().Свойство = Строка.Свойство;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- Если ИспользоватьДопСведения Тогда
- Для Каждого Строка Из Объект.ДополнительныеСведения Цикл
- Если Строка.Свойство.ЭтоДополнительноеСведение Тогда
- ДополнительныеСведения.Добавить().Свойство = Строка.Свойство;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- Если ИспользоватьДопРеквизиты И ИспользоватьДопСведения Тогда
- Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов и сведений)'")
- ИначеЕсли ИспользоватьДопРеквизиты Тогда
- Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов)'")
- ИначеЕсли ИспользоватьДопСведения Тогда
- Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных сведений)'")
- КонецЕсли;
+ ЗаполнитьДополнительныеСвойстваВФорме();
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект)
- ТекущийОбъект.ДополнительныеРеквизиты.Очистить();
- ТекущийОбъект.ДополнительныеСведения.Очистить();
-
- Если ИспользоватьДопРеквизиты Тогда
- Для Каждого Строка Из ДополнительныеРеквизиты Цикл
- ТекущийОбъект.ДополнительныеРеквизиты.Добавить().Свойство = Строка.Свойство;
- КонецЦикла;
- КонецЕсли;
-
- Если ИспользоватьДопСведения Тогда
- Для каждого Строка Из ДополнительныеСведения Цикл
- ТекущийОбъект.ДополнительныеСведения.Добавить().Свойство = Строка.Свойство;
- КонецЦикла;
- КонецЕсли;
+ ЗаполнитьДополнительныеСвойстваВОбъекте(ТекущийОбъект);
КонецПроцедуры
@@ -84,45 +56,18 @@
КонецПроцедуры
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДополнительныеРеквизиты
+
&НаКлиенте
-Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
+Процедура ДополнительныеРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
- // При записи свойства необходимо перенести свойство в соответствующую группу и
- // обновить поле Комментарий (если требуется).
-
- Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда
- ПроверитьСоставыТаблицПослеЗаписиСвойства(Параметр.ЭтоДополнительноеСведение, Источник);
-
- ИначеЕсли ИмяСобытия = "ПодборСвойствВНабор" Тогда
-
- ДобавляемыеСвойства = Новый Массив;
-
- Если Параметр.ЭтоДополнительноеСведение Тогда
- Таблица = ДополнительныеСведения;
- Иначе
- Таблица = ДополнительныеРеквизиты
- КонецЕсли;
-
- Для каждого Добавляемый Из Параметр.ДобавляемыеСвойства Цикл
-
- Отбор = Новый Структура("Свойство", Добавляемый);
-
- Если Таблица.НайтиСтроки(Отбор).Количество() = 0 Тогда
- ДобавляемыеСвойства.Добавить(Добавляемый);
- КонецЕсли;
- КонецЦикла;
-
- Если ДобавляемыеСвойства.Количество() > 0 Тогда
- ДобавитьСвойства(ДобавляемыеСвойства);
- КонецЕсли;
-
+ Если Прав(Поле.Имя, СтрДлина("Свойство")) = "Свойство" Тогда
+ ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
-////////////////////////////////////////////////////////////////////////////////
-// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДополнительныеРеквизиты
-
&НаКлиенте
Процедура ДополнительныеРеквизитыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
@@ -138,9 +83,9 @@
КонецПроцедуры
&НаКлиенте
-Процедура ДополнительныеРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
+Процедура ДополнительныеРеквизитыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
- ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка);
+ ОбработкаВыбораСвойства(ВыбранноеЗначение, ДополнительныеРеквизиты);
КонецПроцедуры
@@ -168,20 +113,27 @@
КонецПроцедуры
+&НаКлиенте
+Процедура ДополнительныеСведенияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+
+ ОбработкаВыбораСвойства(ВыбранноеЗначение, ДополнительныеСведения);
+
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
&НаКлиенте
Процедура ПодборДопРеквизитов(Команда)
- ВызватьФормуПодбора(Ложь);
+ ПодобратьДополнительныеСвойства(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПодборДопСведений(Команда)
- ВызватьФормуПодбора(Истина);
+ ПодобратьДополнительныеСвойства(Истина);
КонецПроцедуры
@@ -190,112 +142,153 @@
Процедура ЗаполнитьИспользованиеДополнительныхСвойств()
- Если Объект.Ссылка = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда
- ИспользоватьДопРеквизиты = Ложь;
- ИспользоватьДопСведения = Ложь;
- Возврат;
- КонецЕсли;
-
- Если Объект.Ссылка.Предопределенный
- И Объект.Ссылка.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда
-
- СсылкаПредопределенного = Объект.Ссылка;
- Иначе
- СсылкаПредопределенного = Объект.Ссылка.Родитель;
- КонецЕсли;
-
- Если СсылкаПредопределенного = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда
- ВызватьИсключение НСтр("ru = 'Не найден владелец свойств.'");
- КонецЕсли;
-
- ВидыСвойствНабора = УправлениеСвойствами.ВидыСвойствНабора(СсылкаПредопределенного);
+ ВидыСвойствНабора = УправлениеСвойствами.ВидыСвойствНабора(Объект.Ссылка);
ИспользоватьДопРеквизиты = ВидыСвойствНабора.ДополнительныеРеквизиты;
ИспользоватьДопСведения = ВидыСвойствНабора.ДополнительныеСведения;
+ Если Параметры.СкрытьДополнительныеРеквизиты Тогда
+ ИспользоватьДопРеквизиты = Ложь;
+ КонецЕсли;
+
+ Если Параметры.СкрытьДополнительныеСведения Тогда
+ ИспользоватьДопСведения = Ложь;
+ КонецЕсли;
+
+ Если НЕ ИспользоватьДопРеквизиты И НЕ ИспользоватьДопСведения Тогда
+
+ Если Параметры.СкрытьДополнительныеРеквизиты Тогда
+ ВызватьИсключение НСтр("ru = 'Использование дополнительных сведений не определено.'");
+
+ ИначеЕсли Параметры.СкрытьДополнительныеСведения Тогда
+ ВызватьИсключение НСтр("ru = 'Использование дополнительных реквизитов не определено.'");
+ Иначе
+ ВызватьИсключение НСтр("ru = 'Использование дополнительных реквизитов и
+ |дополнительных сведений не определено.'");
+ КонецЕсли;
+ КонецЕсли;
+
+ Если НЕ ИспользоватьДопРеквизиты Тогда
+ Элементы.ДополнительныеРеквизиты.Видимость = Ложь;
+ Элементы.ДополнительныеСведения.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
+
+ ИначеЕсли НЕ ИспользоватьДопСведения Тогда
+ Элементы.ДополнительныеСведения.Видимость = Ложь;
+ Элементы.ДополнительныеРеквизиты.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
+ КонецЕсли;
+
+ Если ИспользоватьДопРеквизиты И ИспользоватьДопСведения Тогда
+ Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов и сведений)'")
+ ИначеЕсли ИспользоватьДопРеквизиты Тогда
+ Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов)'")
+ ИначеЕсли ИспользоватьДопСведения Тогда
+ Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных сведений)'")
+ КонецЕсли;
+
КонецПроцедуры
-&НаСервереБезКонтекста
-Функция ДобавитьВыделенныеСвойства(Знач ДобавляемыеСвойства, ДопРеквизиты, ДопСведения)
+Процедура ЗаполнитьДополнительныеСвойстваВФорме()
+
+ ДополнительныеРеквизиты.Очистить();
+ ДополнительныеСведения.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
- | ДополнительныеРеквизитыИСведения.Ссылка КАК Свойство
- |ПОМЕСТИТЬ Временная
- |ИЗ
- | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
- |ГДЕ
- | (ДополнительныеРеквизитыИСведения.Ссылка В (&ДопРеквизиты)
- | ИЛИ ДополнительныеРеквизитыИСведения.Ссылка В (&ДопСведения))
- |;
- |
- |////////////////////////////////////////////////////////////////////////////////
- |ВЫБРАТЬ
| ДополнительныеРеквизитыИСведения.Ссылка,
| ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение
|ИЗ
- | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
- | ЛЕВОЕ СОЕДИНЕНИЕ Временная КАК Временная
- | ПО ДополнительныеРеквизитыИСведения.Ссылка = Временная.Свойство
- |ГДЕ
- | ДополнительныеРеквизитыИСведения.Ссылка В ИЕРАРХИИ(&ДобавляемыеСвойства)
- | И НЕ ДополнительныеРеквизитыИСведения.ЭтоГруппа
- | И Временная.Свойство ЕСТЬ NULL
- | И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления
- |
- |УПОРЯДОЧИТЬ ПО
- | ДополнительныеРеквизитыИСведения.Наименование";
+ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения";
- Запрос.УстановитьПараметр("ДобавляемыеСвойства", ДобавляемыеСвойства);
- Запрос.УстановитьПараметр("ДопРеквизиты", ДопРеквизиты);
- Запрос.УстановитьПараметр("ДопСведения", ДопСведения);
+ НачатьТранзакцию();
+ Попытка
+ ВсеСвойства = Запрос.Выполнить().Выгрузить();
+
+ ЗафиксироватьТранзакцию();
+ Исключение
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+ КонецПопытки;
- Выборка = Запрос.Выполнить().Выбрать();
+ ВсеСвойства.Индексы.Добавить("Ссылка");
- ДопРеквизиты.Очистить();
- ДопСведения.Очистить();
-
- Если Выборка.Количество() = 0 Тогда
- Возврат Ложь;
+ Если ИспользоватьДопРеквизиты Тогда
+ Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл
+ Свойство = ВсеСвойства.Найти(Строка.Свойство, "Ссылка");
+ Если Свойство = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+ Если НЕ Свойство.ЭтоДополнительноеСведение Тогда
+ НоваяСтрока = ДополнительныеРеквизиты.Добавить();
+ НоваяСтрока.Свойство = Строка.Свойство;
+ НоваяСтрока.ЗаполнятьОбязательно =
+ ?(Строка.ЗаполнятьОбязательно = 0,
+ "",
+ ?(Строка.ЗаполнятьОбязательно = 1, "Да", "Нет"));
+ КонецЕсли;
+ КонецЦикла;
КонецЕсли;
- Пока Выборка.Следующий() Цикл
-
- Если Выборка.ЭтоДополнительноеСведение Тогда
- ДопСведения.Добавить(Выборка.Ссылка);
- Иначе
- ДопРеквизиты.Добавить(Выборка.Ссылка);
- КонецЕсли;
-
- КонецЦикла;
+ Если ИспользоватьДопСведения Тогда
+ Для Каждого Строка Из Объект.ДополнительныеСведения Цикл
+ Свойство = ВсеСвойства.Найти(Строка.Свойство, "Ссылка");
+ Если Свойство = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+ Если Свойство.ЭтоДополнительноеСведение Тогда
+ НоваяСтрока = ДополнительныеСведения.Добавить();
+ НоваяСтрока.Свойство = Строка.Свойство;
+ КонецЕсли;
+ КонецЦикла;
+ КонецЕсли;
- Возврат Истина;
-
-КонецФункции
+КонецПроцедуры
-&НаКлиенте
-Процедура ДополнительныеСвойстваПередУдалением(Элемент, ТаблицаСвойств)
+Процедура ЗаполнитьДополнительныеСвойстваВОбъекте(ТекущийОбъект)
- МассивУдаляемыхСвойств = Новый Массив;
+ ТекущийОбъект.ДополнительныеРеквизиты.Очистить();
+ ТекущийОбъект.ДополнительныеСведения.Очистить();
- Для Каждого ВыдСтрока Из Элемент.ВыделенныеСтроки Цикл
- Свойство = Элемент.ДанныеСтроки(ВыдСтрока).Свойство;
- МассивУдаляемыхСвойств.Добавить(Свойство);
- Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("Свойство", Свойство));
- ТаблицаСвойств.Удалить(Строки[0]);
- КонецЦикла;
+ Если ИспользоватьДопРеквизиты Тогда
+ Для Каждого Строка Из ДополнительныеРеквизиты Цикл
+ НоваяСтрока = ТекущийОбъект.ДополнительныеРеквизиты.Добавить();
+ НоваяСтрока.Свойство = Строка.Свойство;
+ НоваяСтрока.ЗаполнятьОбязательно =
+ ?(Строка.ЗаполнятьОбязательно = "",
+ 0,
+ ?(Строка.ЗаполнятьОбязательно = "Да", 1, 2));
+ КонецЦикла;
+ КонецЕсли;
- Если МассивУдаляемыхСвойств.Количество() > 0 Тогда
- ОповеститьОбИзмененииНабора("Удаление", МассивУдаляемыхСвойств);
+ Если ИспользоватьДопСведения Тогда
+ Для каждого Строка Из ДополнительныеСведения Цикл
+ НоваяСтрока = ТекущийОбъект.ДополнительныеСведения.Добавить();
+ НоваяСтрока.Свойство = Строка.Свойство;
+ КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
-Процедура ВызватьФормуПодбора(ЭтоДополнительноеСведение)
+Процедура ДополнительныеСвойстваПередУдалением(Элемент, ТаблицаСвойств)
+
+ Для каждого ВыделеннаяСтрока Из Элемент.ВыделенныеСтроки Цикл
+
+ Свойство = Элемент.ДанныеСтроки(ВыделеннаяСтрока).Свойство;
+
+ Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("Свойство", Свойство));
+ ТаблицаСвойств.Удалить(Строки[0]);
+ КонецЦикла;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПодобратьДополнительныеСвойства(ЭтоДополнительноеСведение)
+
+ Отбор = Новый Структура("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение);
ПараметрыФормы = Новый Структура;
- ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение);
+ ПараметрыФормы.Вставить("Отбор", Отбор);
+ ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
ВыбранныеСвойства = Новый Массив;
@@ -303,29 +296,20 @@
Для Каждого Строка Из ДополнительныеСведения Цикл
ВыбранныеСвойства.Добавить(Строка.Свойство);
КонецЦикла;
+ ВладелецФормы = Элементы.ДополнительныеСведения;
Иначе
Для Каждого Строка Из ДополнительныеРеквизиты Цикл
ВыбранныеСвойства.Добавить(Строка.Свойство);
КонецЦикла;
+ ВладелецФормы = Элементы.ДополнительныеРеквизиты;
КонецЕсли;
- ПараметрыФормы.Вставить("ВыбранныеСвойства", ВыбранныеСвойства);
+ ПараметрыФормы.Вставить("ВыбранныеЗначения", ВыбранныеСвойства);
- ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ПодборСвойств",
+ ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаВыбора",
ПараметрыФормы,
- ЭтаФорма,
- УникальныйИдентификатор);
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура ОповеститьОбИзмененииНабора(Операция, МассивСвойств)
-
- ПараметрыОповещения = Новый Структура;
- ПараметрыОповещения.Вставить("Операция", Операция);
- ПараметрыОповещения.Вставить("МассивСвойств", МассивСвойств);
-
- Оповестить("ИзменилсяНаборВыбранных", ПараметрыОповещения, ЭтаФорма);
+ ВладелецФормы,
+ Объект.Ссылка);
КонецПроцедуры
@@ -357,52 +341,44 @@
КонецПроцедуры
-&НаКлиенте
-Процедура ДобавитьСвойства(ДобавляемыеСвойства)
-
- ДопРеквизиты = Новый Массив;
- Для каждого Строка Из ДополнительныеРеквизиты Цикл
- ДопРеквизиты.Добавить(Строка.Свойство);
- КонецЦикла;
-
- ДопСведения = Новый Массив;
- Для каждого Строка Из ДополнительныеСведения Цикл
- ДопСведения.Добавить(Строка.Свойство);
- КонецЦикла;
-
- ОбщийМассивСвойств = Новый Массив;
-
- Если ДобавитьВыделенныеСвойства(ДобавляемыеСвойства, ДопРеквизиты, ДопСведения) Тогда
-
- Модифицированность = Истина;
-
- Для каждого ДобавляемыйРеквизит Из ДопРеквизиты Цикл
- НоваяСтрока = ДополнительныеРеквизиты.Добавить();
- НоваяСтрока.Свойство = ДобавляемыйРеквизит;
- ОбщийМассивСвойств.Добавить(ДобавляемыйРеквизит);
- КонецЦикла;
-
- Для каждого ДобавляемоеСведение Из ДопСведения Цикл
- НоваяСтрока = ДополнительныеСведения.Добавить();
- НоваяСтрока.Свойство = ДобавляемоеСведение;
- ОбщийМассивСвойств.Добавить(ДобавляемоеСведение);
- КонецЦикла;
-
- ОповеститьОбИзмененииНабора("Добавление", ОбщийМассивСвойств);
-
- КонецЕсли;
-
-КонецПроцедуры
-
&НаКлиенте
Процедура ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
- ПараметрыФормы.Вставить("ОткрываетсяИзНабораСвойств", Истина);
ПараметрыФормы.Вставить("Ключ", Элемент.ДанныеСтроки(ВыбраннаяСтрока).Свойство);
- ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыФормы);
+ ОткрытьФорму(
+ "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента",
+ ПараметрыФормы);
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОбработкаВыбораСвойства(ВыбранноеЗначение, Таблица)
+
+ Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
+
+ Для каждого Значение Из ВыбранноеЗначение Цикл
+ ДобавитьВыбранноеСвойство(Значение, Таблица);
+ КонецЦикла;
+ Иначе
+ ДобавитьВыбранноеСвойство(ВыбранноеЗначение, Таблица);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьВыбранноеСвойство(Значение, Таблица)
+
+ Если ТипЗнч(Значение) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда
+
+ Отбор = Новый Структура("Свойство", Значение);
+ Если Таблица.НайтиСтроки(Отбор).Количество() = 0 Тогда
+
+ Таблица.Добавить().Свойство = Значение;
+ КонецЕсли;
+ КонецЕсли;
КонецПроцедуры
diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html
index 872d6a6ef..add2d568e 100644
--- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html
+++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html
@@ -1,5 +1,7 @@
-
+
Администратор системы может настроить наборы дополнительных свойств для определенных объектов системы. Способ хранения дополнительного свойства в информационной базе и место размещения на форме объекта зависит от типа свойства: дополнительный реквизит или сведение.
+
Предопределенные наборы и группы наборов соответствуют объектам конфигурации, в которых можно использовать дополнительные реквизиты и сведения. Добавление новых наборов и групп наборов невозможно.
+
В форме набора с помощью команды Подбор можно добавить объекту новый дополнительный реквизит или сведение.
Примечание:
При удалении свойства из набора, значение свойства сохраняется в информационной базе до тех пор, пока не будет очищено. При этом удаленное из набора дополнительное свойство будет отображаться на форме объекта или форме дополнительных сведений особым образом.
diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl
index 77fbbb493..5d4392bb7 100644
--- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl
+++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -65,3 +67,5 @@
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo
index e7f1cf956..0842a741d 100644
--- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo
+++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo
@@ -208,7 +208,7 @@
Свойствоru
- Свойство
+ Дополнительный реквизитChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения
@@ -225,6 +225,29 @@
IndexUse
+
+ ЗаполнятьОбязательно
+
+ ru
+ Заполнять обязательно
+
+
+ Number
+
+ 1
+ true
+
+
+
+ ru
+ Настройка проверки заполненности дополнительного реквизита для этого набора свойств.
+Замещает настройку по умолчанию, сделанную в свойстве.
+
+
+
+ Use
+ Use
+ ForFolderAndItem
@@ -249,7 +272,7 @@
Свойствоru
- Свойство
+ Дополнительное сведениеChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения
@@ -268,20 +291,11 @@
ForFolderAndItem
-
- ПодборСвойств
+
+ ФормаЭлементаru
- Подбор свойств
-
- PersonalComputer
- MobileDevice
-
-
- ФормаВыбора
-
- ru
- Форма выбора
+ Набор дополнительных реквизитов и сведенийPersonalComputerMobileDevice
@@ -301,25 +315,24 @@
ruФорма списка
-
-
- ru
-
- PersonalComputerMobileDevice
-
- ФормаЭлемента
+
+ ФормаВыбораru
- Форма элемента
+ Форма выбора
+
+ PersonalComputer
+ MobileDevice
+
+
+ РедактированиеСоставаНаборов
+
+ ru
+ Редактирование состава наборов
-
-
- ru
-
- PersonalComputerMobileDevice
diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Forms/ФормаПравила/Help/ru.html b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Forms/ФормаПравила/Help/ru.html
index 54d9e653d..0b6c2e2e6 100644
--- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Forms/ФормаПравила/Help/ru.html
+++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Forms/ФормаПравила/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Правило заполнения реквизита объекта 1С:Документооборота можно задать тремя способами:
Из реквизита объекта конфигурации. Данный способ означает, что реквизит объекта 1С:Документооборота будет заполнен из некоторого реквизита объекта-потребителя. При выборе данного способа требуется указать, из какого реквизита объекта-потребителя требуется получить значение и подставить в реквизит объекта 1С:Документооборота.
Из указанного значения. Данный способ означает, что реквизит объекта 1С:Документооборота будет заполнен из значения, указанного пользователем. При выборе данного способа требуется указать то значение, которе будет использовано для заполнения реквизита 1С:Документооборота. Можно указать значение только того типа, который имеет реквизит 1С:Документооборота.
diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Help/ru.html b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Help/ru.html
index eae5822a2..cce48b1fc 100644
--- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Help/ru.html
+++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Справочник содержит настройки, которые позволяют автоматически заполнить реквизиты документа 1С:Документооборота из данных объекта, для которого создается документ.
Например для документа "Счет от поставщика" можно указать:
для данного объекта создается входящий документ,
поле Организация входящего документа заполняется из поля Организация счета,
diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl
index dd02781f2..7e3e21d39 100644
--- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl
+++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
Функция ПолучитьРеквизитыОбъектаДокументооборота(ТипОбъектаДокументооборота, Параметры = Неопределено) Экспорт
@@ -267,3 +269,5 @@
НоваяСтрока.ДопРеквизитТип = ДопРеквизитТип;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl
index bea9230eb..84988850e 100644
--- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl
+++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
Процедура ПередЗаписью(Отказ)
@@ -13,3 +15,5 @@
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ОбщиеДанныеИнформационногоЦентра/ОбщиеДанныеИнформационногоЦентра.mdo b/SSL/src/Catalogs/ОбщиеДанныеИнформационногоЦентра/ОбщиеДанныеИнформационногоЦентра.mdo
new file mode 100644
index 000000000..586c83e4a
--- /dev/null
+++ b/SSL/src/Catalogs/ОбщиеДанныеИнформационногоЦентра/ОбщиеДанныеИнформационногоЦентра.mdo
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+ ОбщиеДанныеИнформационногоЦентра
+
+ ru
+ Общие данные информационного центра
+
+ true
+ Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Description
+ Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Code
+ DontUse
+
+ Use
+ PredefinedDataName
+
+ Use
+
+
+
+
+ Use
+ Predefined
+
+ Use
+
+
+
+
+ Use
+ Ref
+
+ Use
+
+
+
+
+ Use
+ DeletionMark
+
+ Use
+
+
+
+
+ Use
+ IsFolder
+
+ Use
+
+
+
+
+ Use
+ Owner
+ true
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Parent
+ true
+
+ Use
+
+
+
+
+ Use
+ Description
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Code
+
+ Use
+
+
+
+ Use
+ Managed
+ Use
+ 2
+ true
+ 9
+ 150
+ String
+ Variable
+ true
+ true
+ AsDescription
+ InDialog
+ BothWays
+
+ Вложения
+
+ ru
+ Вложения
+
+
+ ValueStorage
+
+
+
+
+ Use
+ Use
+
+
+ ВнешняяСсылка
+
+ ru
+ Внешняя ссылка
+
+
+ String
+
+
+
+
+
+ Use
+ Use
+
+
+ Дата
+
+ ru
+ Дата
+
+
+ Date
+
+ Date
+
+
+
+
+
+ Use
+ Use
+
+
+ ДатаНачалаАктуальности
+
+ ru
+ Дата начала актуальности
+
+
+ Date
+
+
+
+
+
+ Index
+ Use
+ Use
+
+
+ ДатаОкончанияАктуальности
+
+ ru
+ Дата окончания актуальности
+
+
+ Date
+
+
+
+
+
+ Use
+ Use
+
+
+ Идентификатор
+
+ ru
+ Идентификатор
+
+
+ UUID
+
+
+
+
+ Index
+ Use
+
+
+ Критичность
+
+ ru
+ Критичность
+
+
+ Number
+
+ 10
+ true
+
+
+
+
+
+ Index
+ Use
+ Use
+
+
+ ТекстHTML
+
+ ru
+ Текст HTML
+
+
+ String
+
+
+
+
+
+ Use
+ Use
+
+
+ ТипИнформации
+
+ ru
+ Тип информации
+
+
+ CatalogRef.ТипыИнформацииИнформационногоЦентра
+
+
+
+
+ Index
+ Use
+ Use
+
+
diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form
index 99a7640d2..059a43f81 100644
--- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form
@@ -431,6 +431,10 @@
OnCreateAtServerПриСозданииНаСервере
+
+ FillCheckProcessingAtServer
+ ОбработкаПроверкиЗаполненияНаСервере
+ LockOwnertruetrue
@@ -531,6 +535,10 @@
AfterWriteAtServerПослеЗаписиНаСервере
+
+ OnReadAtServer
+ ПриЧтенииНаСервере
+ BeforeWriteAtServerПередЗаписьюНаСервере
diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl
index 9d941649a..7bf397dd3 100644
--- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl
@@ -1,6 +1,5 @@
-
////////////////////////////////////////////////////////////////////////////////
-// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
+// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
@@ -12,41 +11,13 @@
РабочийКаталог = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка);
// СтандартныеПодсистемы.Свойства
- УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "");
+ УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма);
// Конец СтандартныеПодсистемы.Свойства
ОбновитьПолныйПуть();
КонецПроцедуры
-&НаСервере
-Процедура ОбновитьПолныйПуть()
-
- ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Родитель");
-
- Если ЗначениеЗаполнено(ПапкаРодитель) Тогда
-
- ПолныйПуть = "";
- Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл
-
- ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть;
- ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПапкаРодитель, "Родитель");
- Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда
- Прервать;
- КонецЕсли;
-
- КонецЦикла;
-
- ПолныйПуть = ПолныйПуть + Строка(Объект.Ссылка);
-
- Если Не ПустаяСтрока(ПолныйПуть) Тогда
- ПолныйПуть = """" + ПолныйПуть + """";
- КонецЕсли;
-
- КонецЕсли;
-
-КонецПроцедуры
-
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
@@ -58,6 +29,15 @@
КонецПроцедуры
+&НаСервере
+Процедура ПриЧтенииНаСервере(ТекущийОбъект)
+
+ // СтандартныеПодсистемы.Свойства
+ УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
+ // Конец СтандартныеПодсистемы.Свойства
+
+КонецПроцедуры
+
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект)
@@ -67,6 +47,30 @@
КонецПроцедуры
+&НаСервере
+Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
+ РабочийКаталог = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка);
+КонецПроцедуры
+
+&НаСервере
+Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
+
+ // СтандартныеПодсистемы.Свойства
+ УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты);
+ // Конец СтандартныеПодсистемы.Свойства
+
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ
+
+&НаКлиенте
+Процедура РодительПриИзменении(Элемент)
+
+ ОбновитьПолныйПуть();
+
+КонецПроцедуры
+
&НаКлиенте
Процедура РабочийКаталогВладельцаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
@@ -130,7 +134,7 @@
РабочийКаталогРодителя = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(РодительСсылка);
РабочийКаталогЭтойПапки = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка);
- РабочийКаталогУнаследованный = РабочийКаталогРодителя + Объект.Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента());
+ РабочийКаталогУнаследованный = РабочийКаталогРодителя + Объект.Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента());
Если ПустаяСтрока(РабочийКаталогРодителя) Тогда
РабочийКаталог = "";
@@ -144,19 +148,9 @@
КонецПроцедуры
-&НаСервере
-Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
- РабочийКаталог = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка);
-КонецПроцедуры
-
-
-&НаКлиенте
-Процедура РодительПриИзменении(Элемент)
-
- ОбновитьПолныйПуть();
-
-КонецПроцедуры
+////////////////////////////////////////////////////////////////////////////////
+// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
&НаКлиенте
Процедура ОткрытьСписокПапокИФайлов(Команда)
@@ -167,20 +161,55 @@
КонецПроцедуры
-////////////////////////////////////////////////////////////////////////////////
-// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ
+// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура Подключаемый_РедактироватьСоставСвойств()
- УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка);
+ УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма);
КонецПроцедуры
+// Конец СтандартныеПодсистемы.Свойства
+
+////////////////////////////////////////////////////////////////////////////////
+// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+
+&НаСервере
+Процедура ОбновитьПолныйПуть()
+
+ ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Родитель");
+
+ Если ЗначениеЗаполнено(ПапкаРодитель) Тогда
+
+ ПолныйПуть = "";
+ Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл
+
+ ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть;
+ ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПапкаРодитель, "Родитель");
+ Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда
+ Прервать;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ПолныйПуть = ПолныйПуть + Строка(Объект.Ссылка);
+
+ Если Не ПустаяСтрока(ПолныйПуть) Тогда
+ ПолныйПуть = """" + ПолныйПуть + """";
+ КонецЕсли;
+
+ КонецЕсли;
+
+КонецПроцедуры
+
+// СтандартныеПодсистемы.Свойства
+
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
- УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект"));
+ УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
КонецПроцедуры
+// Конец СтандартныеПодсистемы.Свойства
diff --git a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html
index 5689b6536..ded0860a0 100644
--- a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html
+++ b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Все файлы хранятся в структуре папок, которую удобно вести, например:
в соответствии с организационной структурой Вашего предприятия;
по типам файлов (например, "Договора", "Приказы", "Служебные записки");
diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl
index 62fdc013e..9565fea6c 100644
--- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
// Подсистема "Управление доступом"
// Процедура ЗаполнитьНаборыЗначенийДоступа по свойствам объекта заполняет наборы значений доступа
@@ -10,7 +12,7 @@
// Изменение - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора,
// Удаление - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора,
//
-// Вызывается из процедуры УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(),
+// Вызывается из процедуры УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(),
// если объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьНаборыЗначенийДоступа" и
// из таких же процедур объектов, у которых наборы значений доступа зависят от наборов этого
// объекта (в этом случае объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьЗависимыеНаборыЗначенийДоступа").
@@ -91,9 +93,9 @@
// Добавляем слэш в конце, если его нет
РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
- РабочийКаталогУнаследованныйПрежний = РабочийКаталог + Ссылка.Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
+ РабочийКаталогУнаследованныйПрежний = РабочийКаталог + Ссылка.Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
Если РабочийКаталогУнаследованныйПрежний = РабочийКаталогЭтойПапки Тогда
- РабочийКаталог = РабочийКаталог + Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
+ РабочийКаталог = РабочийКаталог + Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
РаботаСФайламиВызовСервера.СохранитьРабочийКаталог(Ссылка, РабочийКаталог);
КонецЕсли;
КонецЕсли;
@@ -108,13 +110,13 @@
РабочийКаталогУнаследованныйПрежний = РабочийКаталог;
Если РабочийКаталог <> "" Тогда
- РабочийКаталогУнаследованныйПрежний = РабочийКаталогУнаследованныйПрежний + Ссылка.Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
+ РабочийКаталогУнаследованныйПрежний = РабочийКаталогУнаследованныйПрежний + Ссылка.Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
КонецЕсли;
Если РабочийКаталогУнаследованныйПрежний = РабочийКаталогЭтойПапки Тогда // рабочий каталог автоформируется от родителя
Если РабочийКаталогНовый <> "" Тогда
- РабочийКаталогНовый = РабочийКаталогНовый + Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
+ РабочийКаталогНовый = РабочийКаталогНовый + Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
РаботаСФайламиВызовСервера.СохранитьРабочийКаталог(Ссылка, РабочийКаталогНовый);
Иначе
РаботаСФайламиВызовСервера.ОчиститьРабочийКаталог(Ссылка);
@@ -138,7 +140,7 @@
// Добавляем слэш в конце, если его нет
РабочийКаталогВладельца = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталогВладельца, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
- РабочийКаталогВладельца = РабочийКаталогВладельца + Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
+ РабочийКаталогВладельца = РабочийКаталогВладельца + Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера());
РаботаСФайламиВызовСервера.СохранитьРабочийКаталог(Ссылка, РабочийКаталогВладельца);
КонецЕсли;
КонецЕсли;
@@ -186,3 +188,5 @@
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo
index 6ab3c2ec6..83318ae28 100644
--- a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo
+++ b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo
@@ -310,6 +310,10 @@
+
+ Отбор.Владелец
+ Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство
+ DontUseUseUse
diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl
index 49f12dd32..fdd39f2a9 100644
--- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -49,3 +51,5 @@
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl
index 0f7dc31a5..b08e5bdef 100644
--- a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl
+++ b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl
@@ -6,15 +6,23 @@
Если ТипЗнч(ПараметрыВыполненияКоманды.Источник) = Тип("УправляемаяФорма") Тогда
- Если ПараметрыВыполненияКоманды.Источник.ИмяФормы = "Справочник.Пользователи.Форма.ФормаСписка" Тогда
+ Если ПараметрыВыполненияКоманды.Источник.ИмяФормы =
+ "Справочник.Пользователи.Форма.ФормаСписка" Тогда
+
ПараметрыФормы.Вставить("Отбор", "Пользователи");
- ИначеЕсли ПараметрыВыполненияКоманды.Источник.ИмяФормы = "Справочник.ВнешниеПользователи.Форма.ФормаСписка" Тогда
- ПараметрыФормы.Вставить("Отбор", "ВнешниеПользователи");
+ ИначеЕсли ПараметрыВыполненияКоманды.Источник.ИмяФормы =
+ "Справочник.ВнешниеПользователи.Форма.ФормаСписка" Тогда
+ ПараметрыФормы.Вставить("Отбор", "ВнешниеПользователи");
КонецЕсли;
КонецЕсли;
- ОткрытьФорму("Справочник.Пользователи.Форма.ПользователиИБ", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
+ ОткрытьФорму(
+ "Справочник.Пользователи.Форма.ПользователиИБ",
+ ПараметрыФормы,
+ ПараметрыВыполненияКоманды.Источник,
+ ПараметрыВыполненияКоманды.Уникальность,
+ ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html
index fa28def9c..ea73d712d 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html
+++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html
@@ -1,4 +1,4 @@
-
+
При записи пользователя (или внешнего пользователя) с установленным флажком Доступ к информационной базе разрешен, вместе с ним автоматически создается соответствующий ему новый (или модифицируется существующий) пользователь ИБ. И наоборот, когда пользователь (или внешний пользователь) записывается со снятым флажком Доступ к информационной базе разрешен, то соответствующий ему пользователь ИБ автоматически удаляется из списка пользователей ИБ. Однако есть ряд ситуаций, когда список пользователей ИБ становится рассинхронизированным со списком пользователей. Тогда с помощью данного списка могут быть решены следующие задачи:
Найти "некорректных" пользователей ИБ и синхронизировать списки пользователей ИБ и пользователей между собой:
если пользователь ИБ был добавлен с помощью конфигуратора (или каким-либо нештатным программным способом), предлагается удалить такого пользователя ИБ;
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl
index 82a66df1f..dfc893309 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl
+++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl
@@ -5,7 +5,9 @@
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
- ВызватьИсключение НСтр("ru = 'Недостаточно прав для открытия списка пользователей информационной базы.'");
+ ВызватьИсключение
+ НСтр("ru = 'Недостаточно прав для открытия
+ |списка пользователей информационной базы.'");
КонецЕсли;
Пользователи.НайтиНеоднозначныхПользователейИБ();
@@ -33,10 +35,10 @@
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
- Если ИмяСобытия = "ДобавленПользовательИБ" ИЛИ
- ИмяСобытия = "ИзмененПользовательИБ" ИЛИ
- ИмяСобытия = "УдаленПользовательИБ" ИЛИ
- ИмяСобытия = "ОчищенаСвязьСНесуществущимПользователемИБ" Тогда
+ Если ИмяСобытия = "ДобавленПользовательИБ"
+ ИЛИ ИмяСобытия = "ИзмененПользовательИБ"
+ ИЛИ ИмяСобытия = "УдаленПользовательИБ"
+ ИЛИ ИмяСобытия = "ОчищенаСвязьСНесуществущимПользователемИБ" Тогда
ЗаполнитьПользователейИБ();
КонецЕсли;
@@ -50,8 +52,12 @@
Процедура ПредставлениеОтбораПриИзменении(Элемент)
Если НЕ ЗначениеЗаполнено(ПредставлениеОтбора) Тогда
+
Отбор = "Все";
- ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению(Отбор).Представление;
+
+ ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению(
+ Отбор).Представление;
+
КонецЕсли;
ЗаполнитьПользователейИБ();
@@ -63,7 +69,10 @@
СтандартнаяОбработка = Ложь;
- ВыбранныйЭлемент = ВыбратьИзСписка(Элементы.ПредставлениеОтбора.СписокВыбора, Элемент, Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению(Отбор));
+ ВыбранныйЭлемент = ВыбратьИзСписка(
+ Элементы.ПредставлениеОтбора.СписокВыбора,
+ Элемент,
+ Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению(Отбор));
Если ВыбранныйЭлемент <> Неопределено Тогда
@@ -99,8 +108,8 @@
&НаКлиенте
Процедура ПользователиИнфБазыПриАктивизацииСтроки(Элемент)
- МожноУдалить = Элементы.ПользователиИнфБазы.ТекущиеДанные <> Неопределено И
- Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0;
+ МожноУдалить = Элементы.ПользователиИнфБазы.ТекущиеДанные <> Неопределено
+ И Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0;
Элементы.ПользователиИнфБазыУдалить.Доступность = МожноУдалить;
Элементы.КонтекстноеМенюПользователиИнфБазыУдалить.Доступность = МожноУдалить;
@@ -111,9 +120,14 @@
Процедура ПользователиИнфБазыПередУдалением(Элемент, Отказ)
Если Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0 Тогда
- Ответ = Вопрос(НСтр("ru = 'Удалить пользователя информационной базы?'"), РежимДиалогаВопрос.ДаНет);
+
+ Ответ = Вопрос(
+ НСтр("ru = 'Удалить пользователя информационной базы?'"), РежимДиалогаВопрос.ДаНет);
+
Если Ответ = КодВозвратаДиалога.Да Тогда
- УдалитьПользователяИБ(Элементы.ПользователиИнфБазы.ТекущиеДанные.ИдентификаторПользователяИБ, Отказ);
+
+ УдалитьПользователяИБ(
+ Элементы.ПользователиИнфБазы.ТекущиеДанные.ИдентификаторПользователяИБ, Отказ);
Иначе
Отказ = Истина;
КонецЕсли;
@@ -173,11 +187,21 @@
| Справочник.ВнешниеПользователи КАК ВнешниеПользователи");
УстановитьПривилегированныйРежим(Истина);
- Выборка = Запрос.Выполнить().Выбрать();
+
+ НачатьТранзакцию();
+ Попытка
+ Выборка = Запрос.Выполнить().Выбрать();
+
+ ЗафиксироватьТранзакцию();
+ Исключение
+ ОтменитьТранзакцию();
+ ВызватьИсключение;
+ КонецПопытки;
Пока Выборка.Следующий() Цикл
- ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Выборка.ИдентификаторПользователяИБ);
+ ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
+ Выборка.ИдентификаторПользователяИБ);
НоваяСтрока = ПользователиИнфБазы.Добавить();
@@ -190,7 +214,10 @@
Если ПользовательИБ = Неопределено Тогда
НоваяСтрока.КодПроблемы = ?(ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ), 2, 3);
- ЕстьНеправильноЗаписанные = ЕстьНеправильноЗаписанные ИЛИ ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ);
+
+ ЕстьНеправильноЗаписанные
+ = ЕстьНеправильноЗаписанные
+ ИЛИ ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ);
Иначе
НоваяСтрока.Имя = ПользовательИБ.Имя;
НоваяСтрока.АутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная;
@@ -198,13 +225,15 @@
НоваяСтрока.ПользовательОС = ПользовательИБ.ПользовательОС;
НоваяСтрока.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
- Если Выборка.Наименование <> ПользовательИБ.ПолноеИмя Тогда // рассогласование по полному имени
+ Если Выборка.Наименование <> ПользовательИБ.ПолноеИмя Тогда
+ // Рассогласование по полному имени.
НоваяСтрока.КодПроблемы = 1;
ЕстьНеправильноЗаписанные = Истина;
КонецЕсли;
КонецЕсли;
- НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию(НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Выборка.ЭтоВнешнийПользователь);
+ НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию(
+ НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Выборка.ЭтоВнешнийПользователь);
КонецЦикла;
@@ -212,8 +241,10 @@
Для Каждого ПользовательИБ Из ПользователиИБ Цикл
- Если ПользователиИнфБазы.НайтиСтроки(Новый Структура("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор)).Количество() = 0 Тогда
- // этого пользователя ИБ нет в справочнике
+ ОтборСтрок = Новый Структура;
+ ОтборСтрок.Вставить("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор);
+ Если ПользователиИнфБазы.НайтиСтроки(ОтборСтрок).Количество() = 0 Тогда
+ // Пользователя ИБ нет в справочнике.
НоваяСтрока = ПользователиИнфБазы.Добавить();
НоваяСтрока.КодПроблемы = 0;
НоваяСтрока.ПолноеИмя = ПользовательИБ.ПолноеИмя;
@@ -222,7 +253,9 @@
НоваяСтрока.АутентификацияОС = ПользовательИБ.АутентификацияОС;
НоваяСтрока.ПользовательОС = ПользовательИБ.ПользовательОС;
НоваяСтрока.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
- НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию(НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Ложь);
+ НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию(
+ НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Ложь);
+
ЕстьНеправильноЗаписанные = Истина;
КонецЕсли;
@@ -235,13 +268,16 @@
УдаляемыеСтроки = Новый Массив;
Если Отбор = "Пользователи" Тогда
- УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("ЭтоПользователь", Ложь)));
+ УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(
+ Новый Структура("ЭтоПользователь", Ложь)));
ИначеЕсли Отбор = "ВнешниеПользователи" Тогда
- УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("ЭтоВнешнийПользователь", Ложь)));
+ УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(
+ Новый Структура("ЭтоВнешнийПользователь", Ложь)));
ИначеЕсли Отбор = "НеправильноЗаписанные" Тогда
УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 3)));
+
УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 4)));
ИначеЕсли Отбор = "БезПользователяИБ" Тогда
@@ -263,7 +299,9 @@
КонецПроцедуры
&НаСервере
-Функция ПолучитьНомерКартинкиПоСостоянию(Знач КодПроблемы, Знач ПометкаУдаления, Знач ЭтоВнешнийПользователь)
+Функция ПолучитьНомерКартинкиПоСостоянию(Знач КодПроблемы,
+ Знач ПометкаУдаления,
+ Знач ЭтоВнешнийПользователь)
НомерКартинки = -1;
@@ -311,11 +349,12 @@
КонецЕсли;
Если ТекущиеДанные.КодПроблемы = 0 Тогда
- Предупреждение(НСтр("ru = 'Данному пользователю информационной базы не сопоставлен элемент справочника.
- |
- |Для создания пользователя информационной базы,
- |связанного с пользователем или внешним пользователем применяйте флажок
- |""Доступ к информационной базе разрешен"" в соответствующей форме элемента.'"));
+ Предупреждение(
+ НСтр("ru = 'Данному пользователю информационной базы не сопоставлен элемент справочника.
+ |
+ |Для создания пользователя информационной базы,
+ |связанного с пользователем или внешним пользователем применяйте флажок
+ |""Доступ к информационной базе разрешен"" в соответствующей форме элемента.'"));
Отказ = Ложь;
ПользователиИнфБазыПередУдалением(Элементы.ПользователиИнфБазы, Отказ);
@@ -323,10 +362,11 @@
ПользователиИнфБазы.Удалить(ТекущиеДанные);
КонецЕсли;
Иначе
- ОткрытьФорму(?(ТекущиеДанные.ЭтоВнешнийПользователь,
- "Справочник.ВнешниеПользователи.ФормаОбъекта",
- "Справочник.Пользователи.ФормаОбъекта"),
- Новый Структура("Ключ", ТекущиеДанные.Ссылка));
+ ОткрытьФорму(
+ ?( ТекущиеДанные.ЭтоВнешнийПользователь,
+ "Справочник.ВнешниеПользователи.ФормаОбъекта",
+ "Справочник.Пользователи.ФормаОбъекта"),
+ Новый Структура("Ключ", ТекущиеДанные.Ссылка));
КонецЕсли;
КонецПроцедуры
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html
index 62862885e..e1095f818 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html
+++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Диалог "Выбор пользователя операционной системы" позволяет выбрать одного из пользователей, зарегистрированных в операционной системе.
В списке "Домены" отображаются имена доменов, видимых с данного компьютера.
В списке "Пользователи" отображаются имена пользователей, зарегистрированных в выбранном домене.
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl
index 0bd156ad0..85bab017d 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl
+++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl
@@ -4,11 +4,11 @@
&НаКлиенте
Процедура ПриОткрытии(Отказ)
- #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
+#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
ТаблицаДоменовИПользователей = ПользователиОС();
- #ИначеЕсли ТонкийКлиент Тогда
+#ИначеЕсли ТонкийКлиент Тогда
ТаблицаДоменовИПользователей = Новый ФиксированныйМассив (ПользователиОС());
- #КонецЕсли
+#КонецЕсли
ЗаполнитьСписокДоменов();
@@ -27,15 +27,19 @@
Если Элемент.ТекущиеДанные <> Неопределено Тогда
ИмяДомена = Элемент.ТекущиеДанные.ИмяДомена;
+
Для Каждого Запись Из ТаблицаДоменовИПользователей Цикл
Если Запись.ИмяДомена = ИмяДомена Тогда
+
Для Каждого Пользователь Из Запись.Пользователи Цикл
ПользовательДомена = СписокПользователейТекущегоДомена.Добавить();
ПользовательДомена.ИмяПользователя = Пользователь;
КонецЦикла;
Прервать;
+
КонецЕсли;
КонецЦикла;
+
СписокПользователейТекущегоДомена.Сортировать("ИмяПользователя");
КонецЕсли;
@@ -95,6 +99,7 @@
ИмяДомена = Элементы.ТаблицаДоменов.ТекущиеДанные.ИмяДомена;
ИмяПользователя = Элементы.ТаблицаПользователейДомена.ТекущиеДанные.ИмяПользователя;
+
СтрокаПользователяWindows = "\\" + ИмяДомена + "\" + ИмяПользователя;
Закрыть(СтрокаПользователяWindows);
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss
index eb1c1dd72..62a95e605 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss
+++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss
@@ -1,6 +1,16 @@
+
+ Служебный
+ Equal
+ false
+
+
+ Недействителен
+ Equal
+ false
+ falseПометкаУдаления
@@ -23,7 +33,7 @@
- Ссылка.Недействителен
+ НедействителенEqualtrue
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form
index 45d54954c..05bc2b31f 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form
+++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form
@@ -166,6 +166,7 @@
truetruetrue
+ MultiRowRow11
@@ -876,7 +877,7 @@
ВЫБРАТЬ
Пользователи.Ссылка,
Пользователи.ПометкаУдаления,
- Пользователи.Предопределенный,
+ Пользователи.Недействителен,
Пользователи.Наименование,
ВЫБОР
КОГДА Пользователи.ПометкаУдаления
@@ -884,12 +885,12 @@
КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор
ТОГДА 4
ИНАЧЕ 1
- КОНЕЦ КАК НомерКартинки
+ КОНЕЦ КАК НомерКартинки,
+ Пользователи.Служебный
ИЗ
Справочник.Пользователи КАК Пользователи
ГДЕ
- Пользователи.Ссылка <> &НеуказанныйПользователь
- И (&ВыбиратьИерархически
+ (&ВыбиратьИерархически
И ИСТИНА В
(ВЫБРАТЬ
ИСТИНА
@@ -906,15 +907,7 @@
Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав
ГДЕ
ГруппыПользователейСостав.Пользователь = Пользователи.Ссылка
- И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей))
- И (&РазделениеВыключено
- ИЛИ (НЕ ИСТИНА В
- (ВЫБРАТЬ
- ИСТИНА
- ИЗ
- РегистрСведений.НеразделенныеПользователи КАК НеразделенныеПользователи
- ГДЕ
- НеразделенныеПользователи.ИдентификаторПользователяИБ = Пользователи.ИдентификаторПользователяИБ)))
+ И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей))
Catalog.Пользователиtruetrue
@@ -939,7 +932,6 @@
true
- FunctionalOption.ИспользоватьГруппыПользователейГруппыПользователей.Parent
@@ -986,49 +978,13 @@
- ГруппаПользователейВсеПользователи
+ ХранимыеПараметрыru
- Группа пользователей все пользователи
+ Хранимые параметры
- 4
-
- CatalogRef.ГруппыПользователей
-
-
- true
-
-
- true
-
-
-
- ИспользоватьГруппы
-
- ru
- Использовать группы
-
- 5
-
- Boolean
-
-
- true
-
-
- true
-
-
-
- ПоказыватьНедействительныхПользователей
-
- ru
- Показывать недействительных пользователей
-
- 6
-
- Boolean
-
+ 7
+ true
@@ -1094,6 +1050,12 @@
ЗакрыватьПриВыборе
+
+ ДоступКИнформационнойБазеРазрешен
+
+ Boolean
+
+
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl
index 7e1a32f20..9fa3887d9 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl
@@ -4,54 +4,35 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "НеуказанныйПользователь", Пользователи.СвойстваНеуказанногоПользователя().СтандартнаяСсылка);
+ // Начальное значение настройки до загрузки данных из настроек.
+ ВыбиратьИерархически = Истина;
- ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "РазделениеВыключено", НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено());
-
- ПоказыватьНедействительныхПользователей = Ложь;
+ ЗаполнитьХранимыеПараметры();
+ ЗаполнитьПараметрыДинамическихСписков();
Если Параметры.РежимВыбора Тогда
-
РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
-
- Иначе
-
- // только если не режим выбора, делаем фильтрацию
-
- Если ПоказыватьНедействительныхПользователей Тогда
- ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ПользователиСписок.Отбор, "Недействителен");
- Иначе
- ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
- ПользователиСписок.Отбор,
- "Недействителен",
- Ложь);
- КонецЕсли;
-
КонецЕсли;
- ИспользоватьГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей");
+ ОбновитьОтборНедействительныхПользователей(ЭтаФорма);
- Если ТипЗнч(Параметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
- Если ИспользоватьГруппы Тогда
- Элементы.ГруппыПользователей.ТекущаяСтрока = Параметры.ТекущаяСтрока;
+ // Скрытие пользователей с пустым идентификатором, если значение параметра Истина.
+ Если Параметры.ДоступКИнформационнойБазеРазрешен Тогда
+
+ Если Параметры.ДоступКИнформационнойБазеРазрешен = Ложь Тогда
+ ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно;
Иначе
- Параметры.ТекущаяСтрока = Неопределено;
+ ВидСравненияКД = ВидСравненияКомпоновкиДанных.НеРавно;
КонецЕсли;
- Иначе
- ТекущийЭлемент = Элементы.ПользователиСписок;
- Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи;
+
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
+ ПользователиСписок.Отбор,
+ "ИдентификаторПользователяИБ",
+ Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"),
+ ВидСравненияКД);
+
КонецЕсли;
- Если НЕ ИспользоватьГруппы Тогда
- Параметры.ВыборГруппПользователей = Ложь;
- Элементы.ГруппаПоказыватьПользователейДочернихГрупп.Видимость = Ложь;
- Элементы.СоздатьГруппуПользователей.Видимость = Ложь;
- КонецЕсли;
-
- // Настройка постоянных данных для списка пользователей
- ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
- ГруппаПользователейВсеПользователи = Справочники.ГруппыПользователей.ВсеПользователи;
-
Если НЕ ПравоДоступа("Добавление", Метаданные.Справочники.ГруппыПользователей) Тогда
Элементы.СоздатьГруппуПользователей.Видимость = Ложь;
КонецЕсли;
@@ -65,43 +46,28 @@
Элементы.ПользователиИБ.Видимость = Ложь;
КонецЕсли;
- // Отбор не помеченных на удаление
+ // Отбор не помеченных на удаление.
ПользователиСписок.Отбор.Элементы[0].Использование = Истина;
- Элементы.ПользователиСписок.РежимВыбора = Истина;
- Элементы.ГруппыПользователей.РежимВыбора = Параметры.ВыборГруппПользователей;
- Элементы.ВыбратьГруппуПользователей.Видимость = Параметры.ВыборГруппПользователей;
- Элементы.ВыбратьПользователя.КнопкаПоУмолчанию = НЕ Параметры.ВыборГруппПользователей;
+ Элементы.ПользователиСписок.РежимВыбора = Истина;
+ Элементы.ГруппыПользователей.РежимВыбора = ХранимыеПараметры.ВыборГруппПользователей;
Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда
- // Режим подбора
+ // Режим подбора.
Элементы.ПользователиСписок.МножественныйВыбор = Истина;
- Если Параметры.ВыборГруппПользователей Тогда
- Заголовок = НСтр("ru = 'Подбор пользователей и групп'");
- Элементы.ВыбратьПользователя.Заголовок = НСтр("ru = 'Выбрать пользователей'");
- Элементы.ВыбратьГруппуПользователей.Заголовок = НСтр("ru = 'Выбрать группы'");
-
+ Если ХранимыеПараметры.ВыборГруппПользователей Тогда
Элементы.ГруппыПользователей.МножественныйВыбор = Истина;
- Элементы.ГруппыПользователей.РежимВыделения = РежимВыделенияТаблицы.Множественный;
- Иначе
- Заголовок = НСтр("ru = 'Подбор пользователей'");
- КонецЕсли;
- Иначе
- // Режим выбора
- Если Параметры.ВыборГруппПользователей Тогда
- Заголовок = НСтр("ru = 'Выбор пользователя или группы'");
- Элементы.ВыбратьПользователя.Заголовок = НСтр("ru = 'Выбрать пользователя'");
- Иначе
- Заголовок = НСтр("ru = 'Выбор пользователя'");
КонецЕсли;
КонецЕсли;
Иначе
- Элементы.ВыбратьПользователя.Видимость = Ложь;
+ Элементы.ВыбратьПользователя.Видимость = Ложь;
Элементы.ВыбратьГруппуПользователей.Видимость = Ложь;
КонецЕсли;
- ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма);
+ ХранимыеПараметры.Вставить("ТекущаяСтрока", Параметры.ТекущаяСтрока);
+ НастроитьФормуПоИспользованиюГруппПользователей();
+ ХранимыеПараметры.Удалить("ТекущаяСтрока");
КонецПроцедуры
@@ -112,6 +78,10 @@
И Источник = Элементы.ГруппыПользователей.ТекущаяСтрока Тогда
Элементы.ПользователиСписок.Обновить();
+
+ ИначеЕсли ВРег(ИмяСобытия) = ВРег("Запись_ИспользоватьГруппыПользователей") Тогда
+
+ ПодключитьОбработчикОжидания("ПриИзмененииИспользованияГруппПользователей", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
@@ -119,8 +89,12 @@
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
- Если Настройки[ВыбиратьИерархически] = Неопределено Тогда
- ВыбиратьИерархически = Истина;
+ Если ТипЗнч(Настройки["ВыбиратьИерархически"]) = Тип("Булево") Тогда
+ ВыбиратьИерархически = Настройки["ВыбиратьИерархически"];
+ КонецЕсли;
+
+ Если НЕ ВыбиратьИерархически Тогда
+ ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
@@ -162,11 +136,15 @@
ПараметрыФормы = Новый Структура;
Если ЗначениеЗаполнено(Элементы.ГруппыПользователей.ТекущаяСтрока) Тогда
-
- ПараметрыФормы.Вставить("ЗначенияЗаполнения", Новый Структура("Родитель", Элементы.ГруппыПользователей.ТекущаяСтрока));
+ ПараметрыФормы.Вставить(
+ "ЗначенияЗаполнения",
+ Новый Структура("Родитель", Элементы.ГруппыПользователей.ТекущаяСтрока));
КонецЕсли;
- ОткрытьФорму("Справочник.ГруппыПользователей.ФормаОбъекта", ПараметрыФормы, Элементы.ГруппыПользователей);
+ ОткрытьФорму(
+ "Справочник.ГруппыПользователей.ФормаОбъекта",
+ ПараметрыФормы,
+ Элементы.ГруппыПользователей);
КонецЕсли;
КонецПроцедуры
@@ -191,7 +169,9 @@
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ГруппаНовогоПользователя", Элементы.ГруппыПользователей.ТекущаяСтрока);
- Если Копирование И Элемент.ТекущиеДанные <> Неопределено Тогда
+ Если Копирование
+ И Элемент.ТекущиеДанные <> Неопределено Тогда
+
ПараметрыФормы.Вставить("ЗначениеКопирования", Элемент.ТекущаяСтрока);
КонецЕсли;
@@ -212,24 +192,143 @@
&НаКлиенте
Процедура ПоказыватьНедействительныхПользователей(Команда)
- ПоказыватьНедействительныхПользователей = Не ПоказыватьНедействительныхПользователей;
+ ОбновитьОтборНедействительныхПользователей(ЭтаФорма, Истина);
- Элементы.ПоказыватьНедействительныхПользователей.Пометка = ПоказыватьНедействительныхПользователей;
-
- Если ПоказыватьНедействительныхПользователей Тогда
- ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ПользователиСписок.Отбор, "Недействителен");
- Иначе
- ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
- ПользователиСписок.Отбор,
- "Недействителен",
- Ложь);
- КонецЕсли;
-
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
+&НаСервере
+Процедура ЗаполнитьХранимыеПараметры()
+
+ ХранимыеПараметры = Новый Структура;
+ ХранимыеПараметры.Вставить("ВыборГруппПользователей", Параметры.ВыборГруппПользователей);
+
+КонецПроцедуры
+
+&НаСервере
+Процедура ЗаполнитьПараметрыДинамическихСписков()
+
+ ОбновитьЗначениеПараметраКомпоновкиДанных(
+ ПользователиСписок,
+ "ПустойУникальныйИдентификатор",
+ Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
+
+КонецПроцедуры
+
+&НаКлиентеНаСервереБезКонтекста
+Процедура ОбновитьОтборНедействительныхПользователей(Форма, ИзменитьОтбор = Ложь)
+
+ Элементы = Форма.Элементы;
+
+ Если ИзменитьОтбор Тогда
+
+ Элементы.ПоказыватьНедействительныхПользователей.Пометка =
+ НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка;
+
+ ИначеЕсли Форма.Параметры.Отбор.Свойство("Недействителен") Тогда
+
+ Элементы.ПоказыватьНедействительныхПользователей.Пометка =
+ Форма.Параметры.Отбор.Недействителен;
+
+ КонецЕсли;
+
+ Если Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда
+
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
+ Форма.ПользователиСписок.Отбор, "Недействителен", Ложь, , , Ложь);
+ Иначе
+ ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
+ Форма.ПользователиСписок.Отбор, "Недействителен", Ложь, , , Истина);
+ КонецЕсли;
+
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриИзмененииИспользованияГруппПользователей()
+
+ НастроитьФормуПоИспользованиюГруппПользователей();
+
+КонецПроцедуры
+
+&НаСервере
+Процедура НастроитьФормуПоИспользованиюГруппПользователей()
+
+ ХранимыеПараметры.Вставить(
+ "ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"));
+
+ Если ХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда
+
+ Если ТипЗнч(ХранимыеПараметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") Тогда
+
+ Если ХранимыеПараметры.ИспользоватьГруппы Тогда
+ Элементы.ГруппыПользователей.ТекущаяСтрока = ХранимыеПараметры.ТекущаяСтрока;
+ Иначе
+ Параметры.ТекущаяСтрока = Неопределено;
+ КонецЕсли;
+ Иначе
+ ТекущийЭлемент = Элементы.ПользователиСписок;
+ Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи;
+ КонецЕсли;
+ Иначе
+ Если НЕ ХранимыеПараметры.ИспользоватьГруппы
+ И Элементы.ГруппыПользователей.ТекущаяСтрока
+ <> Справочники.ГруппыПользователей.ВсеПользователи Тогда
+
+ Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи;
+ КонецЕсли;
+ КонецЕсли;
+
+ Элементы.ГруппаПоказыватьПользователейДочернихГрупп.Видимость = ХранимыеПараметры.ИспользоватьГруппы;
+ Элементы.СоздатьГруппуПользователей.Видимость = ХранимыеПараметры.ИспользоватьГруппы;
+
+ ВыборГруппПользователей = ХранимыеПараметры.ВыборГруппПользователей
+ И ХранимыеПараметры.ИспользоватьГруппы
+ И Параметры.РежимВыбора;
+
+ Если Параметры.РежимВыбора Тогда
+
+ Элементы.ВыбратьГруппуПользователей.Видимость = ВыборГруппПользователей;
+ Элементы.ВыбратьПользователя.КнопкаПоУмолчанию = НЕ ВыборГруппПользователей;
+ АвтоЗаголовок = Ложь;
+
+ Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда
+ // Режим подбора.
+
+ Если ВыборГруппПользователей Тогда
+
+ Заголовок =
+ НСтр("ru = 'Подбор пользователей и групп'");
+
+ Элементы.ВыбратьПользователя.Заголовок =
+ НСтр("ru = 'Выбрать пользователей'");
+
+ Элементы.ВыбратьГруппуПользователей.Заголовок =
+ НСтр("ru = 'Выбрать группы'");
+ Иначе
+ Заголовок = НСтр("ru = 'Подбор пользователей'");
+ КонецЕсли;
+ Иначе
+ // Режим выбора.
+ Если ВыборГруппПользователей Тогда
+
+ Заголовок =
+ НСтр("ru = 'Выбор пользователя или группы'");
+
+ Элементы.ВыбратьПользователя.Заголовок =
+ НСтр("ru = 'Выбрать пользователя'");
+ Иначе
+ Заголовок =
+ НСтр("ru = 'Выбор пользователя'");
+ КонецЕсли;
+ КонецЕсли;
+ КонецЕсли;
+
+ ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма);
+
+КонецПроцедуры
+
&НаКлиенте
Процедура ГруппыПользователейПослеАктивизацииСтроки()
@@ -238,31 +337,52 @@
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма)
+Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(Форма)
- Элементы = ЭтаФорма.Элементы;
- Если НЕ ЭтаФорма.ИспользоватьГруппы
- ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ЭтаФорма.ГруппаПользователейВсеПользователи Тогда
- Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаНельзяУстановитьСвойство;
- ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ВыбиратьИерархически", Истина);
- ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ГруппаПользователей", ЭтаФорма.ГруппаПользователейВсеПользователи);
+ Элементы = Форма.Элементы;
+
+ Если НЕ Форма.ХранимыеПараметры.ИспользоватьГруппы
+ ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ПредопределенноеЗначение(
+ "Справочник.ГруппыПользователей.ВсеПользователи") Тогда
+
+ Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница =
+ Элементы.ГруппаНельзяУстановитьСвойство;
+
+ ОбновитьЗначениеПараметраКомпоновкиДанных(
+ Форма.ПользователиСписок, "ВыбиратьИерархически", Истина);
+
+ ОбновитьЗначениеПараметраКомпоновкиДанных(
+ Форма.ПользователиСписок, "ГруппаПользователей", ПредопределенноеЗначение(
+ "Справочник.ГруппыПользователей.ВсеПользователи"));
Иначе
- Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаУстановитьСвойство;
- ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ВыбиратьИерархически", ЭтаФорма.ВыбиратьИерархически);
- ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока);
+ Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница =
+ Элементы.ГруппаУстановитьСвойство;
+
+ ОбновитьЗначениеПараметраКомпоновкиДанных(
+ Форма.ПользователиСписок, "ВыбиратьИерархически", Форма.ВыбиратьИерархически);
+
+ ОбновитьЗначениеПараметраКомпоновкиДанных(
+ Форма.ПользователиСписок,
+ "ГруппаПользователей",
+ Элементы.ГруппыПользователей.ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, Знач ИмяПараметра, Знач ЗначениеПараметра)
+Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров,
+ Знач ИмяПараметра,
+ Знач ЗначениеПараметра)
Для каждого Параметр Из ВладелецПараметров.Параметры.Элементы Цикл
Если Строка(Параметр.Параметр) = ИмяПараметра Тогда
- Если Параметр.Использование И Параметр.Значение = ЗначениеПараметра Тогда
+
+ Если Параметр.Использование
+ И Параметр.Значение = ЗначениеПараметра Тогда
Возврат;
КонецЕсли;
Прервать;
+
КонецЕсли;
КонецЦикла;
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form
index 39e032cad..258aca999 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form
@@ -1371,7 +1371,7 @@
Left
Для редактирования сведений о пользователе необходимы права администрирования. В остальных случаях, доступен только просмотр сведений о себе, а также возможность изменить свой пароль, язык программы и контактную информацию.
Полное имя пользователя выводится во всех списках и отчетах. Флажок Недействителен по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с программой, и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок Недействителен. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей.
Для того чтобы пользователь мог работать в программе, ему нужно установить флажок Доступ к информационной базе разрешен и задать необходимые свойства: имя, пароль и другие параметры авторизации. Имя для входа в программу может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович").
diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl
index d64bab3a2..4c66058a2 100644
--- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl
@@ -8,47 +8,41 @@
Если НЕ СтандартныеПодсистемыПереопределяемый.ДоступноИзменениеПользователей() Тогда
Если Объект.Ссылка.Пустая() Тогда
- ВызватьИсключение(НСтр("ru = 'В демонстрационном режиме не поддерживается создание новых пользователей'"));
+ ВызватьИсключение
+ НСтр("ru = 'В демонстрационном режиме не поддерживается
+ |создание новых пользователей.'");
КонецЕсли;
-
ТолькоПросмотр = Истина;
КонецЕсли;
Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Видимость = Ложь;
- Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь;
Элементы.ПользовательИнфБазыАутентификацияOpenID.Видимость = Ложь;
+ Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь;
Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Видимость = Ложь;
Элементы.СвойстваАутентификацииОС.Видимость = Ложь;
Элементы.ПользовательИнфБазыРежимЗапуска.Видимость = Ложь;
- Если Метаданные.Языки.Количество() = 1 Тогда
- Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь;
- КонецЕсли;
КонецЕсли;
- Если Объект.Ссылка = Пользователи.СвойстваНеуказанногоПользователя().СтандартнаяСсылка Тогда
+ Если Объект.Служебный Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
- //** Установка начальных значений
- // перед загрузкой данных из настроек на сервере
- // для случая, когда данные ещё не были записаны и не загружаются
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- // Для нового элемента показать все роли, иначе только выбранные
- ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка);
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли;
- //
- ОбновитьДеревоРолей();
+ // Заполнение вспомогательных данных.
- //** Заполнение постоянных данных
АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь();
- // Заполнение списка выбора языка
- Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл
- Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить(МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним);
- КонецЦикла;
+ // Заполнение списка выбора языка.
+ Если Метаданные.Языки.Количество() < 2 Тогда
+ Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь;
+ Иначе
+ Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл
+
+ Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить(
+ МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним);
+ КонецЦикла;
+ КонецЕсли;
- // Заполнение списка выбора режимов запуска
+ // Заполнение списка выбора режимов запуска.
Для каждого РежимЗапуска Из РежимЗапускаКлиентскогоПриложения Цикл
ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(РежимЗапуска);
ИмяЗначения = Сред(ПолноеИмяЗначения, Найти(ПолноеИмяЗначения, ".") + 1);
@@ -56,57 +50,67 @@
КонецЦикла;
Элементы.ПользовательИнфБазыРежимЗапуска.СписокВыбора.СортироватьПоПредставлению();
- //** Подготовка к интерактивным действиям с учетом сценариев открытия формы
+ // Подготовка к интерактивным действиям с учетом сценариев открытия формы.
УстановитьПривилегированныйРежим(Истина);
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
- // Создание нового элемента
+ // Создание нового элемента.
Если Параметры.ГруппаНовогоПользователя <> Справочники.ГруппыПользователей.ВсеПользователи Тогда
ГруппаНовогоПользователя = Параметры.ГруппаНовогоПользователя;
КонецЕсли;
+
Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
- // Копирование элемента
+ // Копирование элемента.
+ ЗначениеКопирования = Параметры.ЗначениеКопирования;
Объект.Наименование = "";
- ПрочитатьПользователяИБ(ЗначениеЗаполнено(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ));
+ ПрочитатьПользователяИБ(
+ ЗначениеЗаполнено(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ));
Иначе
- // Добавление элемента
+ // Добавление элемента.
Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ;
- // Чтение начальных значений свойств пользователя ИБ
+
+ // Чтение начальных значений свойств пользователя ИБ.
ПрочитатьПользователяИБ();
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
- ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь;
- ПользовательИнфБазыАутентификацияСтандартная = Истина;
+ ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь;
ПользовательИнфБазыАутентификацияOpenID = Истина;
+ ПользовательИнфБазыАутентификацияСтандартная = Истина;
ДоступКИнформационнойБазеРазрешен = Истина;
КонецЕсли;
КонецЕсли;
Иначе
- // Открытие существующего элемента
+ // Открытие существующего элемента.
ПрочитатьПользователяИБ();
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
+ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", ПользовательИБСуществует);
+
ОпределитьДействияВФорме();
ОпределитьНесоответствияПользователяСПользователемИБ();
- ТолькоПросмотр = ТолькоПросмотр ИЛИ
- ДействияВФорме.Роли <> "Редактирование" И
- ДействияВФорме.КонтактнаяИнформация <> "Редактирование" И
- НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" ИЛИ
- ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" ) И
- ДействияВФорме.СвойстваЭлемента <> "Редактирование";
+ ТолькоПросмотр
+ = ТолькоПросмотр
+ ИЛИ ДействияВФорме.Роли <> "Редактирование"
+ И ДействияВФорме.КонтактнаяИнформация <> "Редактирование"
+ И НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"
+ ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" )
+ И ДействияВФорме.СвойстваЭлемента <> "Редактирование";
- УстановитьТолькоПросмотрРолей(ПользователиПереопределяемый.ЗапретРедактированияРолей() ИЛИ ДействияВФорме.Роли <> "Редактирование");
+ ОбработатьИнтерфейсРолей(
+ "УстановитьТолькоПросмотрРолей",
+ ПользователиПереопределяемый.ЗапретРедактированияРолей()
+ ИЛИ ДействияВФорме.Роли <> "Редактирование");
// СтандартныеПодсистемы.КонтактнаяИнформация
УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтаФорма, Объект, "КонтактнаяИнформация");
// Конец СтандартныеПодсистемы.КонтактнаяИнформация
- Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
+ Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда
Элементы.Недействителен.ТолькоПросмотр = Истина;
КонецЕсли;
@@ -129,21 +133,27 @@
ОчиститьСообщения();
- ЗаголовокВопросов = НСтр("ru = 'Запись пользователя информационной базы'");
-
Если ДоступКИнформационнойБазеРазрешен Тогда
- Если ДействияВФорме.Роли = "Редактирование" И ПользовательИнфБазыРоли.Количество() = 0 Тогда
- Ответ = Вопрос(НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"),
- РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопросов);
+ ЗаголовокВопросов = НСтр("ru = 'Запись пользователя информационной базы'");
+
+ Если ДействияВФорме.Роли = "Редактирование"
+ И ПользовательИнфБазыРоли.Количество() = 0 Тогда
+
+ Ответ = Вопрос(
+ НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"),
+ РежимДиалогаВопрос.ДаНет,
+ ,
+ ,
+ ЗаголовокВопросов);
+
Если Ответ = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
- // Обработка записи первого администратора
+ // Обработка записи первого администратора.
ТекстВопроса = "";
- Если Пользователи.ТребуетсяСоздатьПервогоАдминистратора(ПолучитьСтруктуруОписанияПользователяИБ(),
- ТекстВопроса) Тогда
+ Если ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса) Тогда
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопросов);
Если Ответ = КодВозвратаДиалога.Нет Тогда
@@ -157,43 +167,33 @@
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
- Если СоздатьПользователяСервиса Тогда
- // предыдущая попытка создания закончилась неудачно
-
- СоздатьПользователяСервиса = Ложь;
- Объект.ИдентификаторПользователяСервиса = Неопределено;
- ТекущийОбъект.ИдентификаторПользователяСервиса = Неопределено;
- КонецЕсли;
+ ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопирования", ЗначениеКопирования);
- Если ДоступКИнформационнойБазеРазрешен
- И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
-
- Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторПользователяСервиса) Тогда
-
- СоздатьПользователяСервиса = Истина;
-
- ИдентификаторПользователяСервиса = Новый УникальныйИдентификатор;
-
- Объект.ИдентификаторПользователяСервиса = ИдентификаторПользователяСервиса;
- ТекущийОбъект.ИдентификаторПользователяСервиса = ИдентификаторПользователяСервиса;
-
- КонецЕсли;
- КонецЕсли;
+ // Восстановление действий в форме, если они изменены на клиенте
+ ОпределитьДействияВФорме();
Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"
- ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда
+ ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда
+
+ ОписаниеПользователяИБ = ОписаниеПользователяИБ();
+ ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля");
- ТекущийОбъект.ДополнительныеСвойства.Вставить("ДоступКИнформационнойБазеРазрешен", ДоступКИнформационнойБазеРазрешен);
-
Если ДоступКИнформационнойБазеРазрешен Тогда
-
- ТекущийОбъект.ДополнительныеСвойства.Вставить("СтруктураОписанияПользователяИБ", ПолучитьСтруктуруОписанияПользователяИБ());
-
+ ОписаниеПользователяИБ.Вставить("Действие", "Записать");
+ Иначе
+ ОписаниеПользователяИБ.Вставить("Действие", "Удалить");
КонецЕсли;
+
+ ТекущийОбъект.ДополнительныеСвойства.Вставить(
+ "ОписаниеПользователяИБ", ОписаниеПользователяИБ);
КонецЕсли;
Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда
- ЗаполнитьЗначенияСвойств(ТекущийОбъект, ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления"));
+
+ ЗаполнитьЗначенияСвойств(
+ ТекущийОбъект,
+ ОбщегоНазначения.ПолучитьЗначенияРеквизитов(
+ ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления"));
КонецЕсли;
ТекущийОбъект.ДополнительныеСвойства.Вставить("ГруппаНовогоПользователя", ГруппаНовогоПользователя);
@@ -206,40 +206,16 @@
КонецПроцедуры
-&НаСервере
-Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
-
- ОписаниеПользователя = Новый Структура;
- ОписаниеПользователя.Вставить("Имя", ПользовательИнфБазыИмя);
- ОписаниеПользователя.Вставить("ПолноеИмя", ПользовательИнфБазыПолноеИмя);
- ОписаниеПользователя.Вставить("Язык", ПользовательИнфБазыЯзык);
-
- СтандартныеПодсистемыПереопределяемый.ПриЗаписиПользователя(ТекущийОбъект, ОписаниеПользователя,
- ПользовательИБСуществует, ДоступКИнформационнойБазеРазрешен, СоздатьПользователяСервиса);
-
-КонецПроцедуры
-
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
- СобытияЗаписиПользователяИБ = Новый Массив;
- СобытияЗаписиПользователяИБ.Добавить("ДобавленПользовательИБ");
- СобытияЗаписиПользователяИБ.Добавить("ИзмененПользовательИБ");
- СобытияЗаписиПользователяИБ.Добавить("УдаленПользовательИБ");
- Для каждого СобытиеЗаписи Из СобытияЗаписиПользователяИБ Цикл
- Если ТекущийОбъект.ДополнительныеСвойства.Свойство(СобытиеЗаписи) Тогда
- ПараметрыЗаписи.Вставить(СобытиеЗаписи, ТекущийОбъект.ДополнительныеСвойства[СобытиеЗаписи]);
- КонецЕсли;
- КонецЦикла;
+ ПараметрыЗаписи.Вставить(
+ ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия);
ПрочитатьПользователяИБ();
ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи);
- Если СоздатьПользователяСервиса Тогда
- СоздатьПользователяСервиса = Ложь;
- КонецЕсли;
-
КонецПроцедуры
&НаКлиенте
@@ -257,10 +233,14 @@
Оповестить("УдаленПользовательИБ", ПараметрыЗаписи.УдаленПользовательИБ, ЭтаФорма);
ИначеЕсли ПараметрыЗаписи.Свойство("ОчищенаСвязьСНесуществущимПользователемИБ") Тогда
- Оповестить("ОчищенаСвязьСНесуществущимПользователемИБ", ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма);
+ Оповестить(
+ "ОчищенаСвязьСНесуществущимПользователемИБ",
+ ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ,
+ ЭтаФорма);
КонецЕсли;
Если ЗначениеЗаполнено(ГруппаНовогоПользователя) Тогда
+
ОповеститьОбИзменении(ГруппаНовогоПользователя);
Оповестить("Запись_ГруппыПользователей", Новый Структура, ГруппаНовогоПользователя);
ГруппаНовогоПользователя = Неопределено;
@@ -273,7 +253,8 @@
Если ДоступКИнформационнойБазеРазрешен Тогда
- Пользователи.ПроверитьЗаполнениеСтруктурыОписанияПользователяИБ(ПолучитьСтруктуруОписанияПользователяИБ(), Отказ);
+ ПользователиСлужебный.ПроверитьОписаниеПользователяИБ(
+ ОписаниеПользователяИБ(), Отказ);
КонецЕсли;
@@ -282,15 +263,7 @@
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
- Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда
- ПоказатьПодсистемыРолей = Ложь;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь;
- Иначе
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- КонецЕсли;
-
- ОбновитьДеревоРолей();
+ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки);
КонецПроцедуры
@@ -312,13 +285,18 @@
// Прим.: неопределенное ПолноеИмя или другое свойство
// не учитывается при записи пользователя ИБ
// ПолноеИмя определено только для вида
- // интерактивных действий "БезОграничения"
+ // интерактивных действий "БезОграничения".
+
Если ПользовательИнфБазыПолноеИмя <> Неопределено Тогда
ПользовательИнфБазыПолноеИмя = Объект.Наименование;
КонецЕсли;
- Если НЕ ПользовательИБСуществует И ДоступКИнформационнойБазеРазрешен Тогда
- ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(Объект.Наименование);
+ Если НЕ ПользовательИБСуществует
+ И ДоступКИнформационнойБазеРазрешен Тогда
+
+ ПользовательИнфБазыИмя =
+ ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(
+ Объект.Наименование);
КонецЕсли;
КонецПроцедуры
@@ -326,8 +304,13 @@
&НаКлиенте
Процедура ДоступКИнформационнойБазеРазрешенПриИзменении(Элемент)
- Если НЕ ПользовательИБСуществует И ДоступКИнформационнойБазеРазрешен Тогда
- ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(Объект.Наименование);
+ Если НЕ ПользовательИБСуществует
+ И ДоступКИнформационнойБазеРазрешен Тогда
+
+ ПользовательИнфБазыИмя =
+ ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(
+ Объект.Наименование);
+
ПользовательИнфБазыПолноеИмя = Объект.Наименование;
КонецЕсли;
@@ -408,7 +391,7 @@
Процедура РолиПометкаПриИзменении(Элемент)
Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда
- ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей");
КонецЕсли;
КонецПроцедуры
@@ -422,39 +405,32 @@
&НаКлиенте
Процедура ПоказатьТолькоВыбранныеРоли(Команда)
- ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли;
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
-Процедура ГруппировкаПоПодсистемам(Команда)
+Процедура ГруппировкаРолейПоПодсистемам(Команда)
- ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Истина);
- Если ПоказатьТолькоВыбранныеРоли Тогда
- РазвернутьПодсистемыРолей();
- КонецЕсли;
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе");
+
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Ложь);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе");
КонецПроцедуры
@@ -465,13 +441,21 @@
Процедура ОпределитьДействияВФорме()
ДействияВФорме = Новый Структура;
- ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование"
- ДействияВФорме.Вставить("КонтактнаяИнформация", ""); // "", "Просмотр", "Редактирование"
- ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих"
- ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование"
+
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("Роли", "");
+
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("КонтактнаяИнформация", "");
+
+ // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих".
+ ДействияВФорме.Вставить("СвойстваПользователяИБ", "");
+
+ // "", "Просмотр", "Редактирование".
+ ДействияВФорме.Вставить("СвойстваЭлемента", "");
Если Пользователи.ЭтоПолноправныйПользователь() Тогда
- // Администратор
+ // Администратор.
ДействияВФорме.Роли = "Редактирование";
ДействияВФорме.КонтактнаяИнформация = "Редактирование";
ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех";
@@ -479,24 +463,23 @@
ИначеЕсли РольДоступна("ДобавлениеИзменениеПользователей")
И НЕ Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка) Тогда
- // Ответственный за список пользователей и групп пользователей
+
+ // Ответственный за список пользователей и групп пользователей.
// (Исполнитель распоряжений о приеме на работу и переводу,
- // переназначению, созданию отделов, подразделений и рабочих групп)
+ // переназначению, созданию отделов, подразделений и рабочих групп).
ДействияВФорме.Роли = "";
ДействияВФорме.КонтактнаяИнформация = "Редактирование";
ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех";
ДействияВФорме.СвойстваЭлемента = "Редактирование";
- ИначеЕсли ЗначениеЗаполнено(Пользователи.ТекущийПользователь()) И
- Объект.Ссылка = Пользователи.ТекущийПользователь() Тогда
- // Свои свойства
+ ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда
+ // Свои свойства.
ДействияВФорме.Роли = "";
ДействияВФорме.КонтактнаяИнформация = "Редактирование";
ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих";
ДействияВФорме.СвойстваЭлемента = "Просмотр";
-
Иначе
- // Чужие свойства
+ // Чужие свойства.
ДействияВФорме.Роли = "";
ДействияВФорме.КонтактнаяИнформация = "Просмотр";
ДействияВФорме.СвойстваПользователяИБ = "";
@@ -505,203 +488,218 @@
ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме);
- // Проверка имен действий в форме
+ // Проверка имен действий в форме.
Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда
ДействияВФорме.Роли = "";
+
ИначеЕсли ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда
ДействияВФорме.Роли = "Просмотр";
КонецЕсли;
+
Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.КонтактнаяИнформация + ",") = 0 Тогда
ДействияВФорме.КонтактнаяИнформация = "";
КонецЕсли;
- Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда
+
+ Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,",
+ ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда
+
ДействияВФорме.СвойстваПользователяИБ = "";
КонецЕсли;
+
Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда
ДействияВФорме.СвойстваЭлемента = "";
КонецЕсли;
+ Если Объект.Служебный Тогда
+ Если ДействияВФорме.Роли = "Редактирование" Тогда
+ ДействияВФорме.Роли = "Просмотр";
+ КонецЕсли;
+
+ Если ДействияВФорме.КонтактнаяИнформация = "Редактирование" Тогда
+ ДействияВФорме.КонтактнаяИнформация = "Просмотр";
+ КонецЕсли;
+
+ Если Найти(", РедактированиеВсех, РедактированиеСвоих,",
+ ", " + ДействияВФорме.СвойстваПользователяИБ + ",") <> 0 Тогда
+
+ ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех";
+ КонецЕсли;
+
+ Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда
+ ДействияВФорме.СвойстваЭлемента = "Просмотр";
+ КонецЕсли;
+ КонецЕсли;
+
КонецПроцедуры
&НаСервере
-Функция ПолучитьСтруктуруОписанияПользователяИБ()
-
- // Восстановление действий в форме, если они изменены на клиенте
- ОпределитьДействияВФорме();
-
- Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"
- И ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеСвоих" Тогда
-
- // Ничего изменять нельзя
- Возврат Новый Структура;
- КонецЕсли;
+Функция ОписаниеПользователяИБ()
Если Элементы.ПолноеИмяПояснениеНесоответствия.Видимость Тогда
ПользовательИнфБазыПолноеИмя = Объект.Наименование;
КонецЕсли;
Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда
+
Результат = Пользователи.НовоеОписаниеПользователяИБ();
- ЗаполнитьЗначенияСвойств(Результат, ЭтаФорма);
+ Пользователи.СкопироватьСвойстваПользователяИБ(
+ Результат,
+ ЭтаФорма,
+ ,
+ "УникальныйИдентификатор,
+ |Роли",
+ "ПользовательИнфБазы");
+
Иначе
+ // РедактированиеСвоих.
Результат = Новый Структура;
- Результат.Вставить("ПользовательИнфБазыИмя", ПользовательИнфБазыИмя);
- Результат.Вставить("ПользовательИнфБазыПароль", ПользовательИнфБазыПароль);
- Результат.Вставить("ПользовательИнфБазыЯзык", ПользовательИнфБазыЯзык);
+ Результат.Вставить("Пароль", ПользовательИнфБазыПароль);
+ Результат.Вставить("Язык", ПользовательИнфБазыЯзык);
КонецЕсли;
Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля);
Если ДействияВФорме.Роли = "Редактирование" Тогда
ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль");
- Результат.Вставить("ПользовательИнфБазыРоли", ТекущиеРоли);
+ Результат.Вставить("Роли", ТекущиеРоли);
+ КонецЕсли;
+
+ Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(Результат) Тогда
+ Роли = Новый Массив;
+ Роли.Добавить("ПолныеПрава");
+
+ ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя;
+ Если Роли.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда
+ Роли.Добавить(ИмяРолиАдминистратораСистемы);
+ КонецЕсли;
+ Результат.Вставить("Роли", Роли);
КонецЕсли;
Возврат Результат;
КонецФункции
+&НаСервере
+Функция ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса = Неопределено)
+
+ Возврат ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(
+ ОписаниеПользователяИБ(),
+ ТекстВопроса);
+
+КонецФункции
+
////////////////////////////////////////////////////////////////////////////////
-// Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия
+// Обработка пользователя ИБ.
&НаСервере
Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь)
УстановитьПривилегированныйРежим(Истина);
- ПрочитанныеРоли = Новый Массив;
-
Пароль = "";
ПодтверждениеПароля = "";
- ПрочитанныеСвойства = Пользователи.НовоеОписаниеПользователяИБ();
- СтарыйИдентификаторПользователяИБ = Неопределено;
+ ПрочитанныеСвойства = Неопределено;
+ ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ();
ПользовательИБСуществует = Ложь;
ДоступКИнформационнойБазеРазрешен = Ложь;
- // Заполнение начальных значений свойств пользователяИБ у пользователя.
+ // Заполнение начальных значений свойств пользователяИБ.
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
- ПрочитанныеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь;
+ ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь;
Иначе
- ПрочитанныеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = НЕ Константы.ИспользоватьВнешнихПользователей.Получить();
+ ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора =
+ НЕ Константы.ИспользоватьВнешнихПользователей.Получить();
КонецЕсли;
-
- ЗаполнитьЗначенияСвойств(ЭтаФорма, ПрочитанныеСвойства);
- ПользовательИнфБазыАутентификацияСтандартная = Истина;
+ ОписаниеПользователяИБ.АутентификацияСтандартная = Истина;
+ ОписаниеПользователяИБ.Роли = Новый Массив;
Если ПриКопированииЭлемента Тогда
- Если Пользователи.ПрочитатьПользователяИБ(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда
- // Т.к. у скопированного пользователя есть связь с пользователемИБ,
- // то устанавливается будущая связь и у нового пользователя.
+ Если Пользователи.ПрочитатьПользователяИБ(
+ Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ,
+ ПрочитанныеСвойства) Тогда
+
+ // Установка связи пользователем ИБ.
ДоступКИнформационнойБазеРазрешен = Истина;
- // Т.к. пользовательИБ скопированного пользователя прочитан,
- // то копируются свойства и роли пользователяИБ.
- ЗаполнитьЗначенияСвойств(ЭтаФорма,
- ПрочитанныеСвойства,
- "ПользовательИнфБазыАутентификацияСтандартная,
- |ПользовательИнфБазыЗапрещеноИзменятьПароль,
- |ПользовательИнфБазыПоказыватьВСпискеВыбора,
- |ПользовательИнфБазыАутентификацияOpenID,
- |ПользовательИнфБазыАутентификацияОС,
- |ПользовательИнфБазыРежимЗапуска,
- |ПользовательИнфБазыЯзык");
+
+ // Копирование свойств и ролей пользователяИБ.
+ ЗаполнитьЗначенияСвойств(
+ ОписаниеПользователяИБ,
+ ПрочитанныеСвойства,
+ "АутентификацияOpenID,
+ |АутентификацияСтандартная,
+ |ЗапрещеноИзменятьПароль,
+ |ПоказыватьВСпискеВыбора,
+ |АутентификацияОС,
+ |РежимЗапуска,
+ |Язык,
+ |Роли");
КонецЕсли;
Объект.ИдентификаторПользователяИБ = Неопределено;
Иначе
- Если Пользователи.ПрочитатьПользователяИБ(Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда
+ Если Пользователи.ПрочитатьПользователяИБ(
+ Объект.ИдентификаторПользователяИБ,
+ ПрочитанныеСвойства) Тогда
ПользовательИБСуществует = Истина;
ДоступКИнформационнойБазеРазрешен = Истина;
- СтарыйИдентификаторПользователяИБ = Объект.ИдентификаторПользователяИБ;
- ЗаполнитьЗначенияСвойств(ЭтаФорма,
- ПрочитанныеСвойства,
- "ПользовательИнфБазыИмя,
- |ПользовательИнфБазыПолноеИмя,
- |ПользовательИнфБазыАутентификацияСтандартная,
- |ПользовательИнфБазыПоказыватьВСпискеВыбора,
- |ПользовательИнфБазыЗапрещеноИзменятьПароль,
- |ПользовательИнфБазыАутентификацияOpenID,
- |ПользовательИнфБазыАутентификацияОС,
- |ПользовательИнфБазыПользовательОС,
- |ПользовательИнфБазыРежимЗапуска,
- |ПользовательИнфБазыЯзык");
+ ЗаполнитьЗначенияСвойств(
+ ОписаниеПользователяИБ,
+ ПрочитанныеСвойства,
+ "Имя,
+ |ПолноеИмя,
+ |АутентификацияOpenID,
+ |АутентификацияСтандартная,
+ |ПоказыватьВСпискеВыбора,
+ |ЗапрещеноИзменятьПароль,
+ |АутентификацияОС,
+ |ПользовательОС,
+ |РежимЗапуска,
+ |Язык,
+ |Роли");
- Если ПрочитанныеСвойства.ПользовательИнфБазыПарольУстановлен Тогда
+ Если ПрочитанныеСвойства.ПарольУстановлен Тогда
Пароль = "**********";
ПодтверждениеПароля = "**********";
КонецЕсли;
КонецЕсли;
КонецЕсли;
- ЗаполнитьРоли(ПрочитанныеРоли);
+ Пользователи.СкопироватьСвойстваПользователяИБ(
+ ЭтаФорма,
+ ОписаниеПользователяИБ,
+ ,
+ "УникальныйИдентификатор,
+ |Роли",
+ "ПользовательИнфБазы");
+
+ ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли);
КонецПроцедуры
-&НаКлиенте
-Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя)
-
- Разделители = Новый Массив;
- Разделители.Добавить(" ");
- Разделители.Добавить(".");
-
- КраткоеИмя = "";
- Для Счетчик = 1 По 3 Цикл
-
- Если Счетчик <> 1 Тогда
- КраткоеИмя = КраткоеИмя + ВРег(Лев(ПолноеИмя, 1));
- КонецЕсли;
-
- ПозицияРазделителя = 0;
- Для каждого Разделитель Из Разделители Цикл
- ПозицияТекущегоРазделителя = Найти(ПолноеИмя, Разделитель);
- Если ПозицияТекущегоРазделителя > 0
- И ( ПозицияРазделителя = 0
- ИЛИ ПозицияРазделителя > ПозицияТекущегоРазделителя ) Тогда
- ПозицияРазделителя = ПозицияТекущегоРазделителя;
- КонецЕсли;
- КонецЦикла;
-
- Если ПозицияРазделителя = 0 Тогда
- Если Счетчик = 1 Тогда
- КраткоеИмя = ПолноеИмя;
- КонецЕсли;
- Прервать;
- КонецЕсли;
-
- Если Счетчик = 1 Тогда
- КраткоеИмя = Лев(ПолноеИмя, ПозицияРазделителя - 1);
- КонецЕсли;
-
- ПолноеИмя = Прав(ПолноеИмя, СтрДлина(ПолноеИмя) - ПозицияРазделителя);
- Пока Разделители.Найти(Лев(ПолноеИмя, 1)) <> Неопределено Цикл
- ПолноеИмя = Сред(ПолноеИмя, 2);
- КонецЦикла;
- КонецЦикла;
-
- Возврат КраткоеИмя;
-
-КонецФункции
-
&НаСервере
Процедура ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи = Неопределено)
- //** Проверка соответствия свойства "ПолноеИмя" пользователяИБ и свойства "Наименование" пользователя
+ // Проверка соответствия свойства "ПолноеИмя" пользователяИБ и
+ // свойства "Наименование" пользователя.
- Если НЕ (ДействияВФорме.СвойстваЭлемента = "Редактирование" И
- ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех") Тогда
- // Прочитанное ПолноеИмя пользователя не может быть изменено, если не совпадает
+ Если НЕ ( ДействияВФорме.СвойстваЭлемента = "Редактирование"
+ И ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех") Тогда
+
+ // Прочитанное ПолноеИмя пользователя не может быть изменено, если не совпадает.
ПользовательИнфБазыПолноеИмя = Неопределено;
КонецЕсли;
- Если НЕ ПользовательИБСуществует ИЛИ
- ПользовательИнфБазыПолноеИмя = Неопределено ИЛИ
- ПользовательИнфБазыПолноеИмя = Объект.Наименование Тогда
+ Если НЕ ПользовательИБСуществует
+ ИЛИ ПользовательИнфБазыПолноеИмя = Неопределено
+ ИЛИ ПользовательИнфБазыПолноеИмя = Объект.Наименование Тогда
Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь;
ИначеЕсли ЗначениеЗаполнено(Объект.Ссылка) Тогда
- Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок =
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок,
ПользовательИнфБазыПолноеИмя);
Иначе
@@ -709,8 +707,11 @@
Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь;
КонецЕсли;
- //** Определение связи с несуществующим пользователем ИБ
- ЕстьНоваяСвязьСНесуществующимПользователемИБ = НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ);
+ // Определение связи с несуществующим пользователем ИБ.
+ ЕстьНоваяСвязьСНесуществующимПользователемИБ
+ = НЕ ПользовательИБСуществует
+ И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ);
+
Если ПараметрыЗаписи <> Неопределено
И ЕстьСвязьСНесуществующимПользователемИБ
И НЕ ЕстьНоваяСвязьСНесуществующимПользователемИБ Тогда
@@ -720,7 +721,7 @@
ЕстьСвязьСНесуществующимПользователемИБ = ЕстьНоваяСвязьСНесуществующимПользователемИБ;
Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда
- // Связь не может быть изменена
+ // Связь не может быть изменена.
Элементы.СвязьОбработкаНесоответствия.Видимость = Ложь;
Иначе
Элементы.СвязьОбработкаНесоответствия.Видимость = ЕстьСвязьСНесуществующимПользователемИБ;
@@ -731,19 +732,6 @@
////////////////////////////////////////////////////////////////////////////////
// Начальное заполнение, проверка заполнения, доступность свойств
-&НаСервере
-Процедура ЗаполнитьРоли(ПрочитанныеРоли)
-
- ПользовательИнфБазыРоли.Очистить();
-
- Для каждого Роль Из ПрочитанныеРоли Цикл
- ПользовательИнфБазыРоли.Добавить().Роль = Роль;
- КонецЦикла;
-
- ОбновитьДеревоРолей();
-
-КонецПроцедуры
-
&НаСервере
Процедура УстановитьПостояннуюДоступностьСвойств()
@@ -755,19 +743,40 @@
Элементы.СвойстваАутентификации1СПредприятия.Отображение =
?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОтображениеОбычнойГруппы.Отступ);
- Элементы.Наименование.ТолькоПросмотр = ДействияВФорме.СвойстваЭлемента <> "Редактирование";
- Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.СвойстваПользователяИБ.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех";
- Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыАутентификацияOpenID.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыАутентификацияОС.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыПользовательОС.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
- Элементы.ПользовательИнфБазыРежимЗапуска.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+ Элементы.Наименование.ТолькоПросмотр =
+ ДействияВФорме.СвойстваЭлемента <> "Редактирование";
- Если НЕ ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда
+ Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.СвойстваПользователяИБ.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех";
+
+ Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыАутентификацияOpenID.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыАутентификацияОС.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыПользовательОС.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Элементы.ПользовательИнфБазыРежимЗапуска.ТолькоПросмотр =
+ ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех";
+
+ Если НЕ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда
Элементы.СвойстваАутентификацииОС.Отображение = ОтображениеОбычнойГруппы.Отступ;
Элементы.ПользовательИнфБазыАутентификацияOpenID.Видимость = Ложь;
КонецЕсли;
@@ -779,21 +788,38 @@
Элементы = Форма.Элементы;
- Элементы.Пароль.ТолькоПросмотр = Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь;
- Элементы.ПодтверждениеПароля.ТолькоПросмотр = Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь;
+ Элементы.Пароль.ТолькоПросмотр =
+ Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь;
- Элементы.ОсновныеСвойства.Доступность = Форма.ДоступКИнформационнойБазеРазрешен;
- Элементы.ОтображениеРолей.Доступность = Форма.ДоступКИнформационнойБазеРазрешен;
- Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = Форма.ДоступКИнформационнойБазеРазрешен;
+ Элементы.ПодтверждениеПароля.ТолькоПросмотр =
+ Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь;
- Элементы.Пароль.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная;
- Элементы.ПодтверждениеПароля.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная;
- Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная;
- Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная;
+ Элементы.ОсновныеСвойства.Доступность =
+ Форма.ДоступКИнформационнойБазеРазрешен;
- Элементы.ПользовательИнфБазыПользовательОС.Доступность = Форма.ПользовательИнфБазыАутентификацияОС;
+ Элементы.ОтображениеРолей.Доступность =
+ Форма.ДоступКИнформационнойБазеРазрешен;
- Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = Не Форма.Объект.Недействителен;
+ Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного =
+ Форма.ДоступКИнформационнойБазеРазрешен;
+
+ Элементы.Пароль.Доступность =
+ Форма.ПользовательИнфБазыАутентификацияСтандартная;
+
+ Элементы.ПодтверждениеПароля.Доступность =
+ Форма.ПользовательИнфБазыАутентификацияСтандартная;
+
+ Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность =
+ Форма.ПользовательИнфБазыАутентификацияСтандартная;
+
+ Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность =
+ Форма.ПользовательИнфБазыАутентификацияСтандартная;
+
+ Элементы.ПользовательИнфБазыПользовательОС.Доступность =
+ Форма.ПользовательИнфБазыАутентификацияОС;
+
+ Элементы.ДоступКИнформационнойБазеРазрешен.Доступность =
+ НЕ Форма.Объект.Недействителен;
КонецПроцедуры
@@ -808,243 +834,21 @@
// Для работы интерфейса ролей
&НаСервере
-Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь)
+Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено)
- Если ТаблицаЗначенийДляЧтения Тогда
- Возврат РеквизитФормыВЗначение("ПользовательИнфБазыРоли");
- КонецЕсли;
-
- Возврат ПользовательИнфБазыРоли;
-
-КонецФункции
-
-&НаСервере
-Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено)
-
- Если ТолькоПросмотрРолей <> Неопределено Тогда
- Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей;
- Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура РазвернутьПодсистемыРолей();
-
- // Развернуть все
- Для каждого Строка Из Роли.ПолучитьЭлементы() Цикл
- Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор(), Истина);
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьДеревоРолей()
-
- // Запоминание текущей строки
- ТекущаяПодсистема = "";
- ТекущаяРоль = "";
- //
- Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда
- ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя);
- ТекущаяРоль = ТекущиеДанные.Имя;
- Иначе
- ТекущаяПодсистема = ТекущиеДанные.Имя;
- ТекущаяРоль = "";
- КонецЕсли;
- КонецЕсли;
+ ПараметрыДействия = Новый Структура;
+ ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр);
+ ПараметрыДействия.Вставить("Форма", ЭтаФорма);
+ ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИнфБазыРоли);
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
- ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных;
+ ПараметрыДействия.Вставить("ТипПользователя",
+ Перечисления.ТипыПользователей.ПользовательОбластиДанных);
Иначе
- ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения;
+ ПараметрыДействия.Вставить("ТипПользователя",
+ Перечисления.ТипыПользователей.ПользовательЛокальногоРешения);
КонецЕсли;
- ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей, ТипПользователя).Скопировать();
- ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
- ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число"));
- ПодготовитьДеревоРолей(ДеревоРолей.Строки, ПоказатьТолькоВыбранныеРоли);
-
- ЗначениеВРеквизитФормы(ДеревоРолей, "Роли");
-
- Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево);
-
- // Восстановление текущей строки
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеПодсистемы = НайденныеСтроки[0];
- ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы);
- СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы);
- Если ЗначениеЗаполнено(ТекущаяРоль) Тогда
- НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль));
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор();
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли);
- СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли);
- Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор();
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач ПоказатьТолькоВыбранныеРоли)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- ПодготовитьДеревоРолей(Строка.Строки, ПоказатьТолькоВыбранныеРоли);
-
- Если Строка.ЭтоРоль Тогда
- Строка.НомерКартинки = 6;
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- Иначе
- Если Строка.Строки.Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.НомерКартинки = 5;
- Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений)
-
- Если СтрокаДереваЗначений.Родитель = Неопределено Тогда
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы();
- Иначе
- ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель);
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы();
- КонецЕсли;
-
- Возврат ДанныеФормыКоллекцияЭлементовДерева;
-
-КонецФункции
-
-
-&НаСервере
-Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить);
-
- Если ИдентификаторСтроки = Неопределено Тогда
- // Обработка всех
- КоллекцияРолей = КоллекцияРолей();
- КоллекцияРолей.Очистить();
- Если Добавить Тогда
- ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли();
- Для каждого ОписаниеРоли Из ВсеРоли Цикл
- Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда
- КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- Если ПоказатьТолькоВыбранныеРоли Тогда
- Если КоллекцияРолей.Количество() > 0 Тогда
- ОбновитьДеревоРолей();
- Иначе
- Роли.ПолучитьЭлементы().Очистить();
- КонецЕсли;
- // Возврат
- Возврат;
- // Возврат
- КонецЕсли;
- Иначе
- ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЕсли;
-
- ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы());
-
- Модифицированность = Истина;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить)
-
- НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль));
-
- Если Добавить Тогда
- Если НайденныеРоли.Количество() = 0 Тогда
- КоллекцияРолей().Добавить().Роль = Роль;
- КонецЕсли;
- Иначе
- Если НайденныеРоли.Количество() > 0 Тогда
- КоллекцияРолей().Удалить(НайденныеРоли[0]);
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить)
-
- Для каждого Строка Из Коллекция Цикл
- Если Строка.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(Строка.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- Если Строка.ЭтоРоль Тогда
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- Иначе
- ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы());
- Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.Пометка = Истина;
- Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл
- Если НЕ Элемент.Пометка Тогда
- Строка.Пометка = Ложь;
- Прервать;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
+ ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия);
КонецПроцедуры
diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html
index 2b0ff8dae..9ce7b5e8d 100644
--- a/SSL/src/Catalogs/Пользователи/Help/ru.html
+++ b/SSL/src/Catalogs/Пользователи/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В этом списке ведется учет пользователей, которые работают с программой.
В случае большого количества пользователей список может быть сгруппирован. Например, группы пользователей можно использовать для ведения структуры подразделений компании. Для того чтобы увидеть всех пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок Показывать пользователей дочерних групп в нижней части списка. Для добавления новых групп пользователей воспользуйтесь командами в левой части списка. Для добавления в группу большого числа пользователей можно открыть форму группы и воспользоваться командой Подобрать. Один и тот же пользователь может одновременно входить в разные группы пользователей.
Для ведения списка пользователей требуются права администрирования. Остальным пользователям доступен только просмотр сведений о себе, а также изменение ряда свойств, таких как: пароль, язык программы и контактная информация.
diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl
index d778e55d8..ae3682157 100644
--- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl
+++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -7,6 +9,10 @@
Параметры.Отбор.Вставить("Недействителен", Ложь);
КонецЕсли;
+ Если НЕ Параметры.Отбор.Свойство("Служебный") Тогда
+ Параметры.Отбор.Вставить("Служебный", Ложь);
+ КонецЕсли;
+
КонецПроцедуры
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
@@ -34,3 +40,5 @@
ДополнительнаяИнформация, СтандартнаяОбработка);
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl
index acdb41c57..4aa407531 100644
--- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl
+++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl
@@ -1,20 +1,40 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
-Перем ЗаписьПервогоАдминистратора; // Флажок факта записи первого администратора,
-// который может быть установлен при обработке
-// пользователя ИБ.
-// Используется в обработчике события ПриЗаписи.
+
+Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ.
+ // Используются в обработчике события ПриЗаписи.
////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
// Программный интерфейс объекта реализован через ДополнительныеСвойства:
//
-// ДоступКИнформационнойБазеРазрешен - есть пользователь ИБ, связанный
-// с данным элементом.
+// ОписаниеПользователяИБ - Структура со свойствами:
+// Действие - Строка - "Записать" или "Удалить".
//
-// СтруктураОписанияПользователяИБ - свойства пользователя ИБ, используются только
-// если ДоступКИнформационнойБазеРазрешен = Истина.
-// Состав свойств см. Пользователи.НовоеОписаниеПользователяИБ.
+// 1. Если Действие = "Удалить" другие свойства не требуются. Удаление
+// будет считаться успешным и в том случае, когда пользовательИБ
+// не найден по значению реквизита ИдентификаторПользователяИБ.
+//
+// 2. Если Действие = "Записать", тогда будет создан или обновлен
+// пользователь ИБ по указанным свойствам.
+//
+// Состав свойств указывается аналогично составу свойств параметра
+// ОбновляемыеСвойства для процедуры Пользователи.ЗаписатьПользователяИБ(),
+// кроме свойства ПолноеИмя - устанавливается по Наименованию.
+//
+// Для привязки существующего свободного пользователя ИБ к свободному элементу
+// справочника, нужно вставить свойство УникальныйИдентификатор.
+//
+// При выполнении действий "Записать" и "Удалить" реквизит объекта
+// ИдентификаторПользователяИБ обновляется автоматически, его не следует изменять.
+//
+// После выполнения действия в структуру вставляются (обновляются) следующие свойства.
+// РезультатДействия - Строка, содержащая одно из значений:
+// "ДобавленПользовательИБ", "ИзмененПользовательИБ", "УдаленПользовательИБ",
+// "ОчищенаСвязьСНесуществущимПользователемИБ", "НеТребуетсяУдалениеПользовательИБ".
+// УникальныйИдентификатор - УникальныйИдентификатор пользователя ИБ.
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -25,28 +45,7 @@
Возврат;
КонецЕсли;
- Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда
- Возврат;
- КонецЕсли;
-
- ЗаписьПервогоАдминистратора = Ложь;
-
- СтандартныеПодсистемыПереопределяемый.ПередЗаписьюПользователя(ЭтотОбъект);
-
- Если ДополнительныеСвойства.Свойство("ДоступКИнформационнойБазеРазрешен") Тогда
- ОбработатьПользователяИБ(Отказ);
- КонецЕсли;
-
- Если Отказ Тогда
- Возврат;
- КонецЕсли;
-
- Если ИдентификаторПользователяИБ <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")
- И Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ, Ссылка) Тогда
-
- ВызватьИсключение(НСтр("ru = 'Один пользователь информационной базы
- |может быть связан только с одним пользователем или внешним пользователем!'"));
- КонецЕсли;
+ ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
КонецПроцедуры
@@ -56,44 +55,40 @@
Возврат;
КонецЕсли;
- Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда
- Возврат;
- КонецЕсли;
-
Если ДополнительныеСвойства.Свойство("ГруппаНовогоПользователя")
И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоПользователя) Тогда
+ Блокировка = Новый БлокировкаДанных;
+ ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей");
+ ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
+ Блокировка.Заблокировать();
+
ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоПользователя.ПолучитьОбъект();
ОбъектГруппы.Состав.Добавить().Пользователь = Ссылка;
ОбъектГруппы.Записать();
- Пользователи.ОбновитьСоставыГруппПользователей(ОбъектГруппы.Ссылка);
КонецЕсли;
- Пользователи.ОбновитьСоставыГруппПользователей(Справочники.ГруппыПользователей.ВсеПользователи);
+ ПользователиСлужебный.ОбновитьСоставыГруппПользователей(
+ Справочники.ГруппыПользователей.ВсеПользователи, Ссылка);
- Если ЗаписьПервогоАдминистратора Тогда
- УстановитьПривилегированныйРежим(Истина);
-
- ПользователиПереопределяемый.ПриЗаписиПервогоАдминистратора(Ссылка);
-
- УстановитьПривилегированныйРежим(Ложь);
- КонецЕсли;
+ ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
КонецПроцедуры
Процедура ПередУдалением(Отказ)
- Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда
- Возврат;
- КонецЕсли;
-
- // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ,
- // кроме того, вход под этим пользователем ИБ приведет к ошибке.
- Если Пользователи.ПользовательИБСуществует(ИдентификаторПользователяИБ) Тогда
- ОписаниеОшибки = "";
- Если НЕ Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ, ОписаниеОшибки) Тогда
- ВызватьИсключение(ОписаниеОшибки);
- КонецЕсли;
+ Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено()
+ ИЛИ НЕ Пользователи.ЭтоНеразделенныйПользователь(ИдентификаторПользователяИБ) Тогда
+
+ // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ,
+ // кроме того, вход под этим пользователем ИБ приведет к ошибке.
+
+ ОписаниеПользователяИБ = Новый Структура;
+ ОписаниеПользователяИБ.Вставить("Действие", "Удалить");
+ ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
+
+ ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ, Истина);
+ ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ);
КонецЕсли;
// Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки.
@@ -102,132 +97,11 @@
Процедура ПриКопировании(ОбъектКопирования)
+ ДополнительныеСвойства.Вставить("ЗначениеКопирования", ОбъектКопирования.Ссылка);
+
ИдентификаторПользователяИБ = Неопределено;
ИдентификаторПользователяСервиса = Неопределено;
КонецПроцедуры
-////////////////////////////////////////////////////////////////////////////////
-// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-
-Процедура ОбработатьПользователяИБ(Отказ)
-
- УровеньДоступа = Пользователи.ПолучитьУровеньДоступаНаИзменениеСвойствПользователяИБ();
-
- Если УровеньДоступа = "НетДоступа" Тогда
- ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'");
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ);
- Возврат;
- КонецЕсли;
-
- УстановитьПривилегированныйРежим(Истина);
- ДополнительныеСвойства.Вставить("ПользовательИБСуществует",
- ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ) <> Неопределено);
-
- Если УровеньДоступа <> "ПолныйДоступ" И УровеньДоступа <> "УправлениеСписком"
- И ДополнительныеСвойства.ПользовательИБСуществует <> ДополнительныеСвойства.ДоступКИнформационнойБазеРазрешен Тогда
-
- ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'");
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ);
- Возврат;
- КонецЕсли;
-
- Если ДополнительныеСвойства.ДоступКИнформационнойБазеРазрешен Тогда
- // Проверка попытки изменения недоступных свойств.
- СтруктураОписанияПользователяИБ = ДополнительныеСвойства.СтруктураОписанияПользователяИБ;
-
- Если УровеньДоступа = "УправлениеСписком" Тогда
- Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда
- ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения ролей пользователя информационной базы'");
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ);
- Возврат;
- КонецЕсли;
- ИначеЕсли УровеньДоступа = "ИзменениеТекущего" Тогда
- ДопустимыеСвойства = Новый Массив;
- ДопустимыеСвойства.Добавить("ПользовательИнфБазыИмя");
- ДопустимыеСвойства.Добавить("ПользовательИнфБазыПароль");
- ДопустимыеСвойства.Добавить("ПользовательИнфБазыЯзык");
- ДопустимыеСвойства.Добавить("ПодтверждениеПароля");
- Для каждого КлючИЗначение Из СтруктураОписанияПользователяИБ Цикл
- Если ДопустимыеСвойства.Найти(КлючИЗначение.Ключ) = Неопределено Тогда
- ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'");
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ);
- Возврат;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- ЗаписатьПользователяИБ(Отказ);
- Иначе
- Если ДополнительныеСвойства.ПользовательИБСуществует Тогда
- УдалитьПользователяИБ(Отказ);
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-Процедура ЗаписатьПользователяИБ(Отказ)
-
- СтруктураОписанияПользователяИБ = ДополнительныеСвойства.СтруктураОписанияПользователяИБ;
- Если СтруктураОписанияПользователяИБ.Количество() = 0 Тогда
- Возврат;
- КонецЕсли;
-
- Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда
- Роли = СтруктураОписанияПользователяИБ.ПользовательИнфБазыРоли;
- Иначе
- Роли = Неопределено;
- КонецЕсли;
-
- Если Пользователи.ТребуетсяСоздатьПервогоАдминистратора(СтруктураОписанияПользователяИБ) Тогда
- ЗаписьПервогоАдминистратора = Истина;
- Роли = Новый Массив;
- Роли.Добавить("ПолныеПрава");
-
- ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя;
- Если Роли.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда
- Роли.Добавить(ИмяРолиАдминистратораСистемы);
- КонецЕсли;
- КонецЕсли;
-
- // Попытка записи пользователя ИБ.
- СозданНовыйПользовательИБ = Ложь;
- ОписаниеОшибки = "";
- Если Пользователи.ЗаписатьПользователяИБ(ИдентификаторПользователяИБ,
- СтруктураОписанияПользователяИБ, Роли, НЕ ДополнительныеСвойства.ПользовательИБСуществует, ОписаниеОшибки) Тогда
-
- Если НЕ ДополнительныеСвойства.ПользовательИБСуществует Тогда
- СозданНовыйПользовательИБ = Истина;
- ИдентификаторПользователяИБ = СтруктураОписанияПользователяИБ.ПользовательИнфБазыУникальныйИдентификатор;
- ДополнительныеСвойства.ПользовательИБСуществует = Истина;
- КонецЕсли;
- Иначе
- Отказ = Истина;
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки);
- КонецЕсли;
-
- Если НЕ Отказ Тогда
- Если СозданНовыйПользовательИБ Тогда
- ДополнительныеСвойства.Вставить("ДобавленПользовательИБ", ИдентификаторПользователяИБ);
- Иначе
- ДополнительныеСвойства.Вставить("ИзмененПользовательИБ", ИдентификаторПользователяИБ);
- КонецЕсли
- КонецЕсли;
-
-КонецПроцедуры
-
-Функция УдалитьПользователяИБ(Отказ)
-
- УстановитьПривилегированныйРежим(Истина);
-
- ОписаниеОшибки = "";
- Если Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ, ОписаниеОшибки) Тогда
- ДополнительныеСвойства.Вставить("УдаленПользовательИБ", ИдентификаторПользователяИБ);
- ДополнительныеСвойства.ПользовательИБСуществует = Ложь;
- ИдентификаторПользователяИБ = Неопределено;
- Иначе
- ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки, , , , Отказ);
- КонецЕсли;
-
-КонецФункции
-
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo
index ad5ea8f17..a7583679d 100644
--- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo
+++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo
@@ -163,6 +163,21 @@
IndexUse
+
+ ИдентификаторПользователяСервиса
+
+ ru
+ Идентификатор пользователя сервиса
+
+
+ UUID
+
+
+
+
+ Index
+ Use
+ Недействителен
@@ -183,19 +198,23 @@
UseUse
-
- ИдентификаторПользователяСервиса
+
+ Служебныйru
- Идентификатор пользователя сервиса
+ Служебный
- UUID
+ Boolean
+
+ ru
+ Неразделенный или разделенный служебный пользователь, права к которому устанавливаются непосредственно и программно.
+
- Index
+ UseUse
diff --git a/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl b/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl
new file mode 100644
index 000000000..4a02b73a8
--- /dev/null
+++ b/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl
@@ -0,0 +1,14 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+
+Процедура ПередЗаписью(Отказ)
+ Перем Характеристика;
+
+ Описание = ВидДанных;
+ Для каждого Характеристика Из ХарактеристикиДанных Цикл
+ Описание = Описание
+ + ", " + Характеристика.Характеристика + ": " + Характеристика.Значение;
+ КонецЦикла;
+КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ПоставляемыеДанные/ПоставляемыеДанные.mdo b/SSL/src/Catalogs/ПоставляемыеДанные/ПоставляемыеДанные.mdo
new file mode 100644
index 000000000..01c0cae93
--- /dev/null
+++ b/SSL/src/Catalogs/ПоставляемыеДанные/ПоставляемыеДанные.mdo
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+
+ ПоставляемыеДанные
+
+ ru
+ Поставляемые данные
+
+ true
+ Catalog.ПоставляемыеДанные.StandardAttribute.Code
+ DontUse
+
+ Use
+ PredefinedDataName
+
+ Use
+
+
+
+
+ Use
+ Predefined
+
+ Use
+
+
+
+
+ Use
+ Ref
+
+ Use
+
+
+
+
+ Use
+ DeletionMark
+
+ Use
+
+
+
+
+ Use
+ IsFolder
+
+ Use
+
+
+
+
+ Use
+ Owner
+ true
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Parent
+ true
+
+ Use
+
+
+
+
+ Use
+ Description
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Code
+
+ Use
+
+
+
+ Use
+ Managed
+ Use
+ 2
+ true
+ 9
+ String
+ Variable
+ true
+ true
+ InDialog
+ BothWays
+
+ ВидДанных
+
+ ru
+ Вид данных
+
+
+ String
+
+ 20
+
+
+
+
+
+ Use
+ Use
+
+
+ ДатаДобавления
+
+ ru
+ Дата добавления
+
+
+ Date
+
+
+
+
+
+ Use
+ Use
+
+
+ ХранимыйФайл
+
+ ru
+ Хранимый файл
+
+
+ ValueStorage
+
+
+
+
+ Use
+ Use
+
+
+ ПутьКФайлу
+
+ ru
+ Путь к файлу
+
+
+ String
+
+
+
+ ru
+ Путь к файлу в томе (служебное поле)
+
+
+
+
+ Use
+ Use
+
+
+ Том
+
+ ru
+ Том
+
+ Ссылка на том (в случае если ТипХраненияФайла - на диске)
+
+ CatalogRef.ТомаХраненияФайлов
+
+
+ ru
+ Том для хранения файла
+
+
+
+
+ Index
+ Use
+
+
+ ТипХраненияФайла
+
+ ru
+ Тип хранения файла
+
+ Где хранятся файлы - в базе как ХранилищеЗначения или в каталоге на диске
+
+ EnumRef.ТипыХраненияФайлов
+
+
+ ru
+ Тип хранения файла (в томе или непосредственно в системе)
+
+
+
+
+ Index
+ Use
+
+
+ ИдентификаторФайла
+
+ ru
+ Идентификатор файла
+
+
+ UUID
+
+
+
+
+ Use
+
+
+ Описание
+
+ ru
+ Описание
+
+
+ String
+
+
+
+
+
+ Use
+ Use
+
+
+
+
+
+
+ ХарактеристикиДанных
+
+ ru
+ Характеристики данных
+
+
+ Use
+ LineNumber
+
+ Use
+
+
+
+
+ Характеристика
+
+ ru
+ Характеристика
+
+
+ String
+
+ 20
+
+
+
+
+ Use
+ Use
+
+
+ Значение
+
+ ru
+ Значение
+
+
+ String
+
+
+
+
+ Use
+ Use
+
+
+
diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl
index 5fd913e6d..925618f16 100644
--- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl
+++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl
@@ -194,7 +194,7 @@
Попытка
Если ФормаДлительнойОперации.Открыта()
И ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания Тогда
- Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда
+ Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда
ЗагрузитьРезультат();
ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации);
Оповестить("ПримененыПравилаОбработкиПисем");
@@ -212,3 +212,11 @@
КонецПопытки;
КонецПроцедуры
+
+&НаСервереБезКонтекста
+Функция ЗаданиеВыполнено(ИдентификаторЗадания)
+
+ Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания);
+
+КонецФункции
+
diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl
index 80cffc8c4..c20fe9468 100644
--- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl
+++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
&НаСервере
@@ -120,3 +122,5 @@
ПоместитьВоВременноеХранилище(ТекстСообщения, АдресХранилища);
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl
index 9a7e2532a..ad33c03dd 100644
--- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -13,3 +15,5 @@
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form
index c0783da53..8b9db1b89 100644
--- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form
@@ -514,21 +514,6 @@
-
- ЦветОформленияДняПоУмолчанию
-
- ru
- Цвет оформления дня по умолчанию
-
- 7
-
-
- true
-
-
- true
-
- ВидыДней
diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl
index c1f78beb0..b47e4279d 100644
--- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl
@@ -10,8 +10,6 @@
ЦветаВидовДней = Новый ФиксированноеСоответствие(Справочники.ПроизводственныеКалендари.ЦветаОформленияВидовДнейПроизводственногоКалендаря());
- ЦветОформленияДняПоУмолчанию = ЦветаВидовДней.Получить(Перечисления.ВидыДнейПроизводственногоКалендаря.ПустаяСсылка());
-
СписокВидовДня = Справочники.ПроизводственныеКалендари.СписокВидовДня();
КонецПроцедуры
@@ -69,7 +67,10 @@
Для Каждого СтрокаОформленияПериода Из ОформлениеПериода.Даты Цикл
ЦветОформленияДня = ЦветаВидовДней.Получить(ВидыДней.Получить(СтрокаОформленияПериода.Дата));
- СтрокаОформленияПериода.ЦветТекста = ?(ЦветОформленияДня = Неопределено, ЦветОформленияДняПоУмолчанию, ЦветОформленияДня);
+ Если ЦветОформленияДня = Неопределено Тогда
+ ЦветОформленияДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняНеУказанЦвет");
+ КонецЕсли;
+ СтрокаОформленияПериода.ЦветТекста = ЦветОформленияДня;
КонецЦикла;
КонецПроцедуры
diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl
index 76846d91f..f9166308e 100644
--- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl
+++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
@@ -72,12 +74,11 @@
ЦветаОформления = Новый Соответствие;
- ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.ПустаяСсылка(), WebЦвета.Красный);
- ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий, WebЦвета.Черный);
- ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота, WebЦвета.ТемноКрасный);
- ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье, WebЦвета.Красный);
- ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный, WebЦвета.ТемноСиний);
- ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник, WebЦвета.Фиолетовый);
+ ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий, ЦветаСтиля.ВидДняРабочийЦвет);
+ ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота, ЦветаСтиля.ВидДняСубботаЦвет);
+ ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье, ЦветаСтиля.ВидДняВоскресеньеЦвет);
+ ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный, ЦветаСтиля.ВидДняПредпраздничныйЦвет);
+ ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник, ЦветаСтиля.ВидДняПраздникЦвет);
Возврат ЦветаОформления;
@@ -130,4 +131,5 @@
Возврат СписокПроизводственныхКалендарей;
-КонецФункции
\ No newline at end of file
+КонецФункции
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html
index f7883bd5d..475a978d6 100644
--- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html
+++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Профилей групп доступа для больших конфигураций может быть много и с похожим назначением, поэтому предусмотрена возможность создавать папки для упрощения поиска нужного профиля и понимания принципов их формирования.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl
index e5dde8a4a..943c0a47d 100644
--- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl
+++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl
@@ -4,26 +4,37 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- Список.Параметры.УстановитьЗначениеПараметра("РежимВыбораТолькоГрупп", Параметры.РежимВыбора И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы);
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Список.Параметры.УстановитьЗначениеПараметра(
+ "РежимВыбораТолькоГрупп",
+ Параметры.РежимВыбора
+ И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы);
СписокНедоступныхПрофилей = Новый СписокЗначений;
Если Параметры.РежимВыбора Тогда
СписокНедоступныхПрофилей.Добавить(Справочники.ПрофилиГруппДоступа.Администратор);
- // Отбор не помеченных на удаление
+ // Отбор не помеченных на удаление.
Список.Отбор.Элементы[1].Использование = Истина;
Элементы.Список.РежимВыбора = Истина;
Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов;
+
Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда
+
Элементы.Список.Отображение = ОтображениеТаблицы.Дерево;
- Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВерхнийУровень;
+ Элементы.Список.НачальноеОтображениеДерева =
+ НачальноеОтображениеДерева.РаскрыватьВерхнийУровень;
КонецЕсли;
АвтоЗаголовок = Ложь;
Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда
- // Режим подбора
+ // Режим подбора.
Элементы.Список.МножественныйВыбор = Истина;
Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный;
diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form
index 5b399d596..b1620e7d2 100644
--- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form
+++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form
@@ -286,7 +286,7 @@
Left
- Form.Command.УстановитьФлажки
+ Form.Command.ВключитьРолиNormalAutotrue
@@ -313,7 +313,7 @@
Left
- Form.Command.СнятьФлажки
+ Form.Command.ИсключитьРолиNormalAutotrue
@@ -366,7 +366,7 @@
Left
- Form.Command.ПоказатьПодсистемыРолей
+ Form.Command.ГруппировкаРолейПоПодсистемамNormalAutotrue
@@ -2169,23 +2169,6 @@
-
- ПоказатьТолькоВыбранныеРоли
-
- ru
- Показать только выбранные роли
-
- 5
-
- Boolean
-
-
- true
-
-
- true
-
- НадписьВидДоступа
@@ -2612,23 +2595,6 @@
ПоказатьПодсистемыРолей
-
- СкрытьРольПолныеПрава
-
- ru
- Скрыть роль полные права
-
- 6
-
- Boolean
-
-
- true
-
-
- true
-
- ТребуетсяПроверитьЗаполнение
@@ -2695,12 +2661,16 @@
Auto
- УстановитьФлажки
+ ВключитьРолиru
- Установить флажки
+ Включить роли5
+
+ ru
+ Включить роли
+ true
@@ -2709,7 +2679,7 @@
- УстановитьФлажки
+ ВключитьРолиtrue
@@ -2717,12 +2687,16 @@
Auto
- СнятьФлажки
+ ИсключитьРолиru
- Снять флажки
+ Исключить роли6
+
+ ru
+ Исключить роли
+ true
@@ -2731,7 +2705,7 @@
- СнятьФлажки
+ ИсключитьРолиtrue
@@ -2739,15 +2713,15 @@
Auto
- ПоказатьПодсистемыРолей
+ ГруппировкаРолейПоПодсистемамru
- Группировка по подсистемам
+ По подсистемам2ru
- Показать группировку по подсистемам
+ Группировать список ролей по подсистемамtrue
@@ -2757,7 +2731,7 @@
- ПоказатьПодсистемыРолей
+ ГруппировкаРолейПоПодсистемамTextPicture
diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl
index d5076102c..fbfa894fb 100644
--- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl
@@ -4,31 +4,30 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- //** Установка начальных значений
- // перед загрузкой данных из настроек на сервере
- // для случая, когда данные ещё не были записаны и не загружаются
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере.
- // Для существующего - в ПриЧтенииНаСервере.
- Если Объект.Ссылка.Пустая() Тогда
- ИнициализацияФормы();
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
КонецЕсли;
- //** Подготовка постоянных коллекций
+ ОбработатьИнтерфейсРолей(
+ "НастроитьИнтерфейсРолейПриСозданииФормы", ЗначениеЗаполнено(Объект.Ссылка));
- // Заполнение списка всегда используемых видов доступа (для исключения при выборе)
- Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаИспользуетсяВсегда", Истина)) Цикл
+ // Подготовка вспомогательных данных.
+
+ // Заполнение списка всегда используемых видов доступа (для исключения при выборе).
+ Отбор = Новый Структура("ВидДоступаИспользуетсяВсегда", Истина);
+ Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Отбор) Цикл
ВидыДоступаИспользуемыеВсегда.Добавить(СвойстваВидаДоступа.ВидДоступа);
КонецЦикла;
- // Заполнение списка видов доступа через права по значениям доступа
- Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина)) Цикл
+ // Заполнение списка видов доступа через права по значениям доступа.
+ Отбор = Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина);
+ Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Отбор) Цикл
ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа);
КонецЦикла;
- // Заполнение типов значений доступа всех видов доступа
- Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа() Цикл
+ // Заполнение типов значений доступа всех видов доступа.
+ Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа() Цикл
Для каждого Тип Из СвойстваВидаДоступа.ВидДоступа.ТипЗначения.Типы() Цикл
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип);
@@ -38,11 +37,14 @@
Если Метаданные.Перечисления.Найти(МетаданныеТипа.Имя) = МетаданныеТипа Тогда
ПредставлениеТипа = МетаданныеТипа.Представление();
Иначе
- ПредставлениеТипа = ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), МетаданныеТипа.ПредставлениеОбъекта, МетаданныеТипа.Представление());
+ ПредставлениеТипа = ?(
+ ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта),
+ МетаданныеТипа.ПредставлениеОбъекта,
+ МетаданныеТипа.Представление());
КонецЕсли;
НоваяСтрока = ТипыЗначенийДоступаВидовДоступа.Добавить();
- НоваяСтрока.ВидДоступа = СвойстваВидаДоступа.ВидДоступа;
+ НоваяСтрока.ВидДоступа = СвойстваВидаДоступа.ВидДоступа;
НоваяСтрока.ТипЗначенияДоступа = ОписаниеТипа.ПривестиЗначение(Неопределено);
НоваяСтрока.ПредставлениеТипа = ПредставлениеТипа;
КонецЦикла;
@@ -53,29 +55,33 @@
ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей();
- //** Установка постоянной доступности свойств
+ // Установка постоянной доступности свойств.
- // Определение необходимости настройки ограничений доступа
+ // Определение необходимости настройки ограничений доступа.
Если НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда
Элементы.ВидыИЗначенияДоступа.Видимость = Ложь;
КонецЕсли;
- // Определение прав восстановления по начальному заполнению
- Элементы.ВосстановитьПоНачальномуЗаполнению.Видимость = УправлениеДоступом.ЕстьРоль("ПолныеПрава") И НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа();
+ // Определение прав восстановления по начальному заполнению.
+ Элементы.ВосстановитьПоНачальномуЗаполнению.Видимость
+ = УправлениеДоступом.ЕстьРоль("ПолныеПрава")
+ И НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа();
- // Определение возможности редактирования элементов формы (перезапись доступна)
- БезРедактированияПоставляемыхЗначений = ТолькоПросмотр ИЛИ Объект.Ссылка = Справочники.ПрофилиГруппДоступа.Администратор;
+ // Определение возможности редактирования элементов формы (перезапись доступна).
+ БезРедактированияПоставляемыхЗначений =
+ ТолькоПросмотр ИЛИ Объект.Ссылка = Справочники.ПрофилиГруппДоступа.Администратор;
// Определение возможности восстановления по начальному заполнению
Элементы.ОписаниеПоставляемогоПрофиля.Видимость = Ложь;
+
Если Объект.Ссылка.Пустая() Тогда
Элементы.ВосстановитьПоНачальномуЗаполнению.Доступность = Ложь;
- //
- ИначеЕсли УправлениеДоступом.ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Объект.Ссылка) Тогда
+
+ ИначеЕсли УправлениеДоступомСлужебный.ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Объект.Ссылка) Тогда
Элементы.ВосстановитьПоНачальномуЗаполнению.Доступность = Истина;
Элементы.ОписаниеПоставляемогоПрофиля.Видимость = Истина;
Элементы.ОписаниеПоставляемогоПрофиля.Доступность = НЕ Объект.ПоставляемыйПрофильИзменен;
- //
+
Если УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда
БезРедактированияПоставляемыхЗначений = Истина;
КонецЕсли;
@@ -83,17 +89,20 @@
Элементы.Наименование.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений;
- // Настройка редактирования видов доступа
+ // Настройка редактирования видов доступа.
Элементы.ВидыДоступа.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений;
Элементы.ВидыДоступаДобавить.Доступность = НЕ БезРедактированияПоставляемыхЗначений;
Элементы.КонтекстноеМенюВидыДоступаДобавить.Доступность = НЕ БезРедактированияПоставляемыхЗначений;
- УстановитьТолькоПросмотрРолей(БезРедактированияПоставляемыхЗначений, БезРедактированияПоставляемыхЗначений);
+ ОбработатьИнтерфейсРолей(
+ "УстановитьТолькоПросмотрРолей",
+ БезРедактированияПоставляемыхЗначений,
+ БезРедактированияПоставляемыхЗначений);
- //** Заполнение изменяемых коллекций
-
- // При создании копированием
- Если Объект.ВидыДоступа.Количество() > 0 И НЕ ЗначениеЗаполнено(Объект.ВидыДоступа[0].Использование) Тогда
+ // При создании копированием.
+ Если Объект.ВидыДоступа.Количество() > 0
+ И НЕ ЗначениеЗаполнено(Объект.ВидыДоступа[0].Использование) Тогда
+
ЗаполнитьСвойстваВидовДоступаВФорме();
КонецЕсли;
@@ -102,9 +111,15 @@
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
+ // Возврат при получении формы для анализа.
+ Если Параметры.Свойство("АвтоТест") Тогда
+ Возврат;
+ КонецЕсли;
+
ЗаполнитьСвойстваВидовДоступаВФорме();
+
ОбновитьГруппыДоступаПрофиля = Ложь;
- ИнициализацияФормы();
+
Элементы.ОписаниеПоставляемогоПрофиля.Доступность = НЕ ТекущийОбъект.ПоставляемыйПрофильИзменен;
КонецПроцедуры
@@ -120,10 +135,16 @@
Если ПроверитьЗаполнение() Тогда
ТребуетсяПроверитьЗаполнение = Ложь;
- КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет);
+ КодОтвета = Вопрос(
+ ТекстВопросаОбновитьГруппыДоступаПрофиля(),
+ РежимДиалогаВопрос.ДаНетОтмена,
+ ,
+ КодВозвратаДиалога.Нет);
+
Если КодОтвета = КодВозвратаДиалога.Отмена Тогда
Отказ = Истина;
Возврат;
+
ИначеЕсли КодОтвета = КодВозвратаДиалога.Да Тогда
ПараметрыЗаписи.Вставить("ОбновитьГруппыДоступаПрофиля");
КонецЕсли;
@@ -146,8 +167,12 @@
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
- Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда
- ПараметрыЗаписи.Вставить("ПерсональныеГруппыДоступаСОбновленнымНаименованием", ТекущийОбъект.ДополнительныеСвойства.ПерсональныеГруппыДоступаСОбновленнымНаименованием);
+ Если ТекущийОбъект.ДополнительныеСвойства.Свойство(
+ "ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда
+
+ ПараметрыЗаписи.Вставить(
+ "ПерсональныеГруппыДоступаСОбновленнымНаименованием",
+ ТекущийОбъект.ДополнительныеСвойства.ПерсональныеГруппыДоступаСОбновленнымНаименованием);
КонецЕсли;
ЗаполнитьСвойстваВидовДоступаВФорме();
@@ -166,6 +191,7 @@
Если ПараметрыЗаписи.Свойство("ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда
ОповеститьОбИзменении(Тип("СправочникСсылка.ГруппыДоступа"));
+
Для каждого ПерсональнаяГруппаДоступа Из ПараметрыЗаписи.ПерсональныеГруппыДоступаСОбновленнымНаименованием Цикл
Оповестить("Запись_ГруппыДоступа", Новый Структура, ПерсональнаяГруппаДоступа);
КонецЦикла;
@@ -244,8 +270,11 @@
КонецЕсли;
// Проверка наличия повторяющихся значений.
- НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(
- Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа));
+ Отбор = Новый Структура;
+ Отбор.Вставить("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа);
+ Отбор.Вставить("ЗначениеДоступа", ТекущаяСтрока.ЗначениеДоступа);
+
+ НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(Отбор);
Если НайденныеЗначения.Количество() > 1 Тогда
Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор();
@@ -269,7 +298,10 @@
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
- ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта);
+
+ ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта",
+ ПроверенныеРеквизитыОбъекта);
+
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
@@ -279,16 +311,7 @@
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
- Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда
- ПоказатьПодсистемыРолей = Ложь;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь;
- Иначе
- ПоказатьПодсистемыРолей = Истина;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина;
- КонецЕсли;
-
- СкрытьРольПолныеПрава = Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор;
- ОбновитьДеревоРолей();
+ ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки);
КонецПроцедуры
@@ -329,7 +352,9 @@
Если НЕ ЗначениеЗаполнено(Элементы.ВидыДоступа.ТекущиеДанные.Использование) Тогда
Элементы.ВидыДоступа.ТекущиеДанные.Предустановленный = Ложь;
Элементы.ВидыДоступа.ТекущиеДанные.ДоступРазрешен = Ложь;
- Элементы.ВидыДоступа.ТекущиеДанные.Использование = Элементы.ВидыДоступаИспользование.СписокВыбора.НайтиПоЗначению("ВначалеВсеЗапрещены").Представление;
+ Элементы.ВидыДоступа.ТекущиеДанные.Использование =
+ Элементы.ВидыДоступаИспользование.СписокВыбора.НайтиПоЗначению(
+ "ВначалеВсеЗапрещены").Представление;
КонецЕсли;
КонецПроцедуры
@@ -338,12 +363,14 @@
&НаКлиенте
Процедура ВидыДоступаВидДоступаПриИзменении(Элемент)
- Если ВидыДоступаИспользуемыеВсегда.НайтиПоЗначению(Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено Тогда
- Предупреждение(
- СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
- НСтр("ru = 'Вид доступа ""%1"" не требуется выбирать.
- |По нему ограничение всегда выполняется.'"),
- Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа));
+ Если ВидыДоступаИспользуемыеВсегда.НайтиПоЗначению(
+ Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено Тогда
+
+ Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Вид доступа ""%1"" не требуется выбирать.
+ |По нему ограничение всегда выполняется.'"),
+ Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа));
+
Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа = Неопределено;
КонецЕсли;
@@ -372,13 +399,16 @@
СтандартнаяОбработка = Ложь;
- Если ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено
- И ВыбранноеЗначение = "ВсеРазрешены" Тогда
- //
- Предупреждение(НСтр("ru = 'Для вида доступа через права по значениям доступа
- |вариант ""Все разрешены, исключения задаются в профиле""
- |не имеет смысла - вместо этого следует удалить вид доступа.'"));
- //
+ Если ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(
+ Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено
+ И
+ ВыбранноеЗначение = "ВсеРазрешены" Тогда
+
+ Предупреждение(
+ НСтр("ru = 'Для вида доступа через права по значениям доступа
+ |вариант ""Все разрешены, исключения задаются в профиле""
+ |не имеет смысла - вместо этого следует удалить вид доступа.'"));
+
Если ВыбранноеЗначение = "ВсеРазрешены" Тогда
ВыбранноеЗначение = "ВсеЗапрещены";
Иначе
@@ -396,7 +426,6 @@
ИЛИ ВыбранноеЗначение = "ВсеРазрешены";
Модифицированность = Истина;
- //
ПриИзмененииТекущегоВидаДоступа(ЭтаФорма);
КонецПроцедуры
@@ -407,8 +436,11 @@
&НаКлиенте
Процедура ЗначенияДоступаПриИзменении(Элемент)
- Если Элемент.ТекущиеДанные <> Неопределено И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда
+ Если Элемент.ТекущиеДанные <> Неопределено
+ И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда
+
Элемент.ТекущиеДанные.ВидДоступа = ТекущийВидДоступа;
+
Отбор = Новый Структура("ВидДоступа", ТекущийВидДоступа);
Элемент.ТекущиеДанные.НомерСтрокиПоВиду = Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество();
КонецЕсли;
@@ -425,8 +457,9 @@
Элемент.ТекущиеДанные.ЗначениеДоступа = ТекущиеТипыЗначенийДоступа[0].Значение;
КонецЕсли;
- Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено
- И ТекущиеТипыЗначенийДоступа.Количество() > 1;
+ Элементы.ЗначениеДоступа.КнопкаОчистки
+ = ТекущийТипЗначенияДоступа <> Неопределено
+ И ТекущиеТипыЗначенийДоступа.Количество() > 1;
КонецПроцедуры
@@ -446,8 +479,9 @@
ТекущиеДанные.ЗначениеДоступа = ТекущийТипЗначенияДоступа;
КонецЕсли;
- Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено
- И ТекущиеТипыЗначенийДоступа.Количество() > 1;
+ Элементы.ЗначениеДоступа.КнопкаОчистки
+ = ТекущийТипЗначенияДоступа <> Неопределено
+ И ТекущиеТипыЗначенийДоступа.Количество() > 1;
Если ТекущийТипЗначенияДоступа = ПользовательПустаяСсылка ИЛИ
ТекущийТипЗначенияДоступа = ГруппаПользователейПустаяСсылка Тогда
@@ -456,19 +490,21 @@
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
- ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина);
+
ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент);
ИначеЕсли ТекущийТипЗначенияДоступа = ВнешнийПользовательПустаяСсылка ИЛИ
ТекущийТипЗначенияДоступа = ГруппаВнешнихПользователейПустаяСсылка Тогда
-
+
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
- ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина);
+
ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент);
КонецЕсли;
@@ -477,19 +513,29 @@
&НаКлиенте
Процедура ЗначениеДоступаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
+ ТекущиеДанные = Элементы.ЗначенияДоступа.ТекущиеДанные;
+
Если ВыбранноеЗначение = Тип("СправочникСсылка.Пользователи") ИЛИ
ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыПользователей") Тогда
СтандартнаяОбработка = Ложь;
- НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа;
- ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", Новый Структура("ВыборГруппПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент);
-
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина);
+
+ ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент);
+
ИначеЕсли ВыбранноеЗначение = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ
ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда
СтандартнаяОбработка = Ложь;
- НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа;
- ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", Новый Структура("ВыборГруппВнешнихПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент);
+
+ ПараметрыФормы = Новый Структура;
+ ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа);
+ ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина);
+
+ ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент);
КонецЕсли;
КонецПроцедуры
@@ -511,10 +557,17 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
- Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда
- ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи);
+ Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи
+ ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда
+
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(
+ Текст,
+ ,
+ ТекущийВидДоступа = ВидДоступаВнешниеПользователи,
+ ТекущийВидДоступа <> ВидДоступаПользователи);
Иначе
- ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь);
+ ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа(
+ Текст, ТекущийВидДоступа, Ложь);
КонецЕсли;
КонецЕсли;
@@ -526,10 +579,17 @@
Если ЗначениеЗаполнено(Текст) Тогда
СтандартнаяОбработка = Ложь;
- Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда
- ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи);
+ Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи
+ ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда
+
+ ДанныеВыбора = СформироватьДанныеВыбораПользователя(
+ Текст,
+ ,
+ ТекущийВидДоступа = ВидДоступаВнешниеПользователи,
+ ТекущийВидДоступа <> ВидДоступаПользователи);
Иначе
- ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь);
+ ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа(
+ Текст, ТекущийВидДоступа, Ложь);
КонецЕсли;
КонецЕсли;
@@ -545,7 +605,7 @@
Процедура РолиПометкаПриИзменении(Элемент)
Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда
- ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей");
КонецЕсли;
КонецПроцедуры
@@ -560,22 +620,34 @@
Предупреждение(НСтр("ru = 'Для выполнения команды требуется переоткрыть форму.'"));
Иначе
- Ответ = Вопрос(НСтр("ru = 'Восстановить профиль по содержимому начального заполнения?'"), РежимДиалогаВопрос.ДаНет);
+ Ответ = Вопрос(
+ НСтр("ru = 'Восстановить профиль по содержимому начального заполнения?'"),
+ РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
- //
- КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет);
- //
+
+ КодОтвета = Вопрос(
+ ТекстВопросаОбновитьГруппыДоступаПрофиля(),
+ РежимДиалогаВопрос.ДаНетОтмена,
+ ,
+ КодВозвратаДиалога.Нет);
+
Если КодОтвета <> КодВозвратаДиалога.Отмена Тогда
ОбновитьГруппыДоступа = (КодОтвета = КодВозвратаДиалога.Да);
- УправлениеДоступом.НачальноеЗаполнениеПрофилейГруппДоступа(Объект.Ссылка, ОбновитьГруппыДоступа, Ложь);
+
+ НачальноеЗаполнениеПрофилейГруппДоступа(
+ Объект.Ссылка, ОбновитьГруппыДоступа, Ложь);
+
Прочитать();
- РазвернутьПодсистемыРолей();
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
+
Если ОбновитьГруппыДоступа Тогда
Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля обновлены.'");
Иначе
Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля не обновлены.'");
КонецЕсли;
- ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.Наименование));
+
+ ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ Текст, Объект.Наименование));
КонецЕсли;
КонецЕсли;
КонецЕсли;
@@ -586,9 +658,12 @@
Процедура ОписаниеПоставляемогоПрофиля(Команда)
ТекстовыйДокумент = Новый ТекстовыйДокумент;
- ТекстовыйДокумент.УстановитьТекст(УправлениеДоступом.ОписаниеПоставляемогоПрофиля(Объект.Ссылка));
+ ТекстовыйДокумент.УстановитьТекст(ОписаниеПоставляемогоПрофиляНаСервере(Объект.Ссылка));
ТекстовыйДокумент.ТолькоПросмотр = Истина;
- ТекстовыйДокумент.Показать(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Описание поставляемого профиля ""%1""'"), Объект.Наименование));
+
+ ТекстовыйДокумент.Показать(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Описание поставляемого профиля ""%1""'"),
+ Объект.Наименование));
КонецПроцедуры
@@ -598,57 +673,38 @@
&НаКлиенте
Процедура ПоказатьТолькоВыбранныеРоли(Команда)
- ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли;
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
-Процедура ПоказатьПодсистемыРолей(Команда)
+Процедура ГруппировкаРолейПоПодсистемам(Команда)
- ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей;
- Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей;
-
- ОбновитьДеревоРолей();
- РазвернутьПодсистемыРолей();
+ ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам");
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
-Процедура УстановитьФлажки(Команда)
+Процедура ВключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Истина);
- Если ПоказатьТолькоВыбранныеРоли Тогда
- РазвернутьПодсистемыРолей();
- КонецЕсли;
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе");
+
+ ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь);
КонецПроцедуры
&НаКлиенте
-Процедура СнятьФлажки(Команда)
+Процедура ИсключитьРоли(Команда)
- ОбновитьСоставРолей(Неопределено, Ложь);
+ ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе");
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-&НаСервере
-Процедура ИнициализацияФормы()
-
- // Для нового элемента показать все роли, иначе только выбранные
- ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка);
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ЗначениеЗаполнено(Объект.Ссылка);
- //
- СкрытьРольПолныеПрава = Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор;
- ОбновитьДеревоРолей();
-
-КонецПроцедуры
-
&НаСервере
Процедура ЗаполнитьСвойстваВидовДоступаВФорме()
@@ -660,101 +716,145 @@
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ПриИзмененииТекущегоВидаДоступа(Знач Контекст)
+Процедура ПриИзмененииТекущегоВидаДоступа(Знач Форма)
+
+ Элементы = Форма.Элементы;
ЗначенияЗадаются = Ложь;
#Если Клиент Тогда
- ТекущиеДанные = Контекст.Элементы.ВидыДоступа.ТекущиеДанные;
+ ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные;
#Иначе
- ТекущиеДанные = Контекст.Объект.ВидыДоступа.НайтиПоИдентификатору(?(Контекст.Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Контекст.Элементы.ВидыДоступа.ТекущаяСтрока));
+ ТекущиеДанные = Форма.Объект.ВидыДоступа.НайтиПоИдентификатору(
+ ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено,
+ -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)'") );
+ КонецЕсли;
+
+ // Обновление поля НадписьВидДоступа.
+ Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ ШаблонНадписи,
Строка(ТекущиеДанные.ВидДоступа));
- ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ТекущиеДанные);
+ ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ТекущиеДанные);
Иначе
- Контекст.ТекущийВидДоступа = Неопределено;
- Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено);
+ Форма.ТекущийВидДоступа = Неопределено;
+ Элементы.ЗначенияДоступа.ОтборСтрок =
+ Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено);
- Если Контекст.Объект.ВидыДоступа.Количество() = 0 Тогда
- Контекст.Объект.ЗначенияДоступа.Очистить();
+ Если Форма.Объект.ВидыДоступа.Количество() = 0 Тогда
+ Форма.Объект.ЗначенияДоступа.Очистить();
КонецЕсли;
КонецЕсли;
- Контекст.ТекущийТипЗначенияДоступа = ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.ТекущийТипЗначенияДоступа);
- Контекст.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений;
- //
+ Форма.ТекущийТипЗначенияДоступа = ?(
+ ТекущиеДанные = Неопределено,
+ Неопределено,
+ ТекущиеДанные.ТекущийТипЗначенияДоступа);
+
+ Форма.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений;
+
Если ЗначенияЗадаются Тогда
- Для каждого ОписаниеТипаВидаДоступа Из Контекст.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа)) Цикл
- Контекст.ТекущиеТипыЗначенийДоступа.Добавить(ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, ОписаниеТипаВидаДоступа.ПредставлениеТипа);
+ Отбор = Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа);
+ ОписаниеТиповВидовДоступа = Форма.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Отбор);
+ Для каждого ОписаниеТипаВидаДоступа Из ОписаниеТиповВидовДоступа Цикл
+
+ Форма.ТекущиеТипыЗначенийДоступа.Добавить(
+ ОписаниеТипаВидаДоступа.ТипЗначенияДоступа,
+ ОписаниеТипаВидаДоступа.ПредставлениеТипа);
КонецЦикла;
Иначе
Если ТекущиеДанные <> Неопределено Тогда
- Отбор = Новый Структура("ВидДоступа", Контекст.Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа);
- Для каждого Строка Из Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл
- Контекст.Объект.ЗначенияДоступа.Удалить(Строка);
+ Отбор = Новый Структура("ВидДоступа", Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа);
+ Для каждого Строка Из Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл
+ Форма.Объект.ЗначенияДоступа.Удалить(Строка);
КонецЦикла
КонецЕсли;
КонецЕсли;
- //
- Если Контекст.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда
- Контекст.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'"));
+
+ Если Форма.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда
+ Форма.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'"));
КонецЕсли;
- Контекст.Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются;
- Контекст.Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются;
+ Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются;
+
+ Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы
+ .ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ОписаниеВидаДоступа)
+Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ОписаниеВидаДоступа)
Если ОписаниеВидаДоступа.Предустановленный Тогда
- КоличествоЗначений = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа)).Количество();
+ Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа);
+ КоличествоЗначений = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество();
Если КоличествоЗначений = 0 Тогда
ЧислоИПредмет = НСтр("ru = 'не назначены'");
Иначе
- ПрописьЧисла = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = ',,,,,,,,0'"));
- ПрописьЧислаИПредмета = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = 'значение,значения,значений,,,,,,0'"));
- ЧислоИПредмет = СтрЗаменить(ПрописьЧислаИПредмета, ПрописьЧисла, Формат(КоличествоЗначений, "ЧГ=") + " ");
+ ПрописьЧисла = ЧислоПрописью(
+ КоличествоЗначений,
+ "Л = ru_RU",
+ НСтр("ru = ',,,,,,,,0'"));
+
+ ПрописьЧислаИПредмета = ЧислоПрописью(
+ КоличествоЗначений,
+ "Л = ru_RU",
+ НСтр("ru = 'значение,значения,значений,,,,,,0'"));
+
+ ЧислоИПредмет = СтрЗаменить(
+ ПрописьЧислаИПредмета,
+ ПрописьЧисла,
+ Формат(КоличествоЗначений, "ЧГ=") + " ");
+
КонецЕсли;
ОписаниеВидаДоступа.Использование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
?(ОписаниеВидаДоступа.ДоступРазрешен,
@@ -764,17 +864,17 @@
Иначе
ОписаниеВидаДоступа.Использование =
?(ОписаниеВидаДоступа.ДоступРазрешен,
- НСтр("ru = 'Все разрешены, исключения назначаются в группах доступа'"),
- НСтр("ru = 'Все запрещены, исключения назначаются в группах доступа'"));
+ НСтр("ru = 'Все разрешены, исключения назначаются в группах доступа'"),
+ НСтр("ru = 'Все запрещены, исключения назначаются в группах доступа'"));
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
-Процедура ОбновитьНомерСтрокиПоВиду(Контекст, ОписаниеВидаДоступа)
+Процедура ОбновитьНомерСтрокиПоВиду(Форма, ОписаниеВидаДоступа)
Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа);
- ЗначенияДоступаПоВиду = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор);
+ ЗначенияДоступаПоВиду = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор);
ТекущийНомер = 1;
Для каждого Строка Из ЗначенияДоступаПоВиду Цикл
@@ -800,22 +900,30 @@
Если ТипыЗначенияДоступа.Количество() = 2 Тогда
- Если ТипыЗначенияДоступа.НайтиПоЗначению(ПользовательПустаяСсылка) <> Неопределено
- И ТипыЗначенияДоступа.НайтиПоЗначению(ГруппаПользователейПустаяСсылка) <> Неопределено Тогда
+ Если ТипыЗначенияДоступа.НайтиПоЗначению(
+ ПользовательПустаяСсылка) <> Неопределено
+
+ И ТипыЗначенияДоступа.НайтиПоЗначению(
+ ГруппаПользователейПустаяСсылка) <> Неопределено Тогда
ТекущийТипЗначенияДоступа = ПользовательПустаяСсылка;
Возврат Истина;
КонецЕсли;
- Если ТипыЗначенияДоступа.НайтиПоЗначению(ВнешнийПользовательПустаяСсылка) <> Неопределено
- И ТипыЗначенияДоступа.НайтиПоЗначению(ГруппаВнешнихПользователейПустаяСсылка) <> Неопределено Тогда
+ Если ТипыЗначенияДоступа.НайтиПоЗначению(
+ ВнешнийПользовательПустаяСсылка) <> Неопределено
+
+ И ТипыЗначенияДоступа.НайтиПоЗначению(
+ ГруппаВнешнихПользователейПустаяСсылка) <> Неопределено Тогда
ТекущийТипЗначенияДоступа = ВнешнийПользовательПустаяСсылка;
Возврат Истина;
КонецЕсли;
КонецЕсли;
- Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент(НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]);
+ Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент(
+ НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]);
+
Если Элемент <> Неопределено Тогда
ТекущийТипЗначенияДоступа = Элемент.Значение;
Возврат Истина;
@@ -829,288 +937,83 @@
&НаКлиенте
Функция ТекстВопросаОбновитьГруппыДоступаПрофиля()
- Возврат НСтр("ru = 'Обновить группы доступа, использующие этот профиль?
- |
- |1. Удалить лишние виды доступа и заданные для них значения доступа.
- |
- |2. Добавить недостающие виды доступа.'");
+ Возврат
+ НСтр("ru = 'Обновить группы доступа, использующие этот профиль?
+ |
+ |1. Удалить лишние виды доступа и заданные для них значения доступа.
+ |
+ |2. Добавить недостающие виды доступа.'");
+
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Для работы интерфейса ролей
&НаСервере
-Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь)
+Процедура ОбработатьИнтерфейсРолей(Действие,
+ ОсновнойПараметр = Неопределено,
+ ДополнительныйПараметр = Неопределено)
- Если ТаблицаЗначенийДляЧтения Тогда
- Возврат Объект.Роли.Выгрузить();
+ ПараметрыДействия = Новый Структура;
+ ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр);
+ ПараметрыДействия.Вставить("ДополнительныйПараметр", ДополнительныйПараметр);
+ ПараметрыДействия.Вставить("Форма", ЭтаФорма);
+ ПараметрыДействия.Вставить("КоллекцияРолей", Объект.Роли);
+
+ ПараметрыДействия.Вставить("СкрытьРольПолныеПрава",
+ Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор);
+
+ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
+ ПараметрыДействия.Вставить("ТипПользователя",
+ Перечисления.ТипыПользователей.ПользовательОбластиДанных);
+ Иначе
+ ПараметрыДействия.Вставить("ТипПользователя",
+ Перечисления.ТипыПользователей.ПользовательЛокальногоРешения);
КонецЕсли;
- Возврат Объект.Роли;
+ ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия);
+
+КонецПроцедуры
+
+&НаСервереБезКонтекста
+Функция СформироватьДанныеВыбораПользователя(Знач Текст,
+ Знач ВключаяГруппы = Истина,
+ Знач ВключаяВнешнихПользователей = Неопределено,
+ Знач БезПользователей = Ложь) Экспорт
+
+ Возврат Пользователи.СформироватьДанныеВыбораПользователя(
+ Текст,
+ ВключаяГруппы,
+ ВключаяВнешнихПользователей,
+ БезПользователей);
КонецФункции
-&НаСервере
-Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь)
+&НаСервереБезКонтекста
+Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина)
- Если ТолькоПросмотрРолей <> Неопределено Тогда
- Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей;
- Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей;
- КонецЕсли;
-
- Если РазрешитьПросмотрТолькоВыбранных Тогда
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь;
- КонецЕсли;
-
-КонецПроцедуры
-
-
-&НаКлиенте
-Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено);
-
- Если Коллекция = Неопределено Тогда
- Коллекция = Роли.ПолучитьЭлементы();
- КонецЕсли;
-
- // Развернуть все
- Для каждого Строка ИЗ Коллекция Цикл
- Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор());
- Если НЕ Строка.ЭтоРоль Тогда
- РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы());
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьДеревоРолей()
-
- Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда
- Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина;
- ПоказатьТолькоВыбранныеРоли = Истина;
- КонецЕсли;
-
- // Запоминание текущей строки
- ТекущаяПодсистема = "";
- ТекущаяРоль = "";
- //
- Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда
- ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя);
- ТекущаяРоль = ТекущиеДанные.Имя;
- Иначе
- ТекущаяПодсистема = ТекущиеДанные.Имя;
- ТекущаяРоль = "";
- КонецЕсли;
- КонецЕсли;
-
- ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей).Скопировать();
- ДобавитьИменаНесуществующихРолей(ДеревоРолей);
- ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево"));
- ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число"));
- ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли);
-
- ЗначениеВРеквизитФормы(ДеревоРолей, "Роли");
-
- Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево);
-
- // Восстановление текущей строки
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеПодсистемы = НайденныеСтроки[0];
- ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы);
- СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы);
- Если ЗначениеЗаполнено(ТекущаяРоль) Тогда
- НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль));
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор();
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор();
- КонецЕсли;
- Иначе
- НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина);
- Если НайденныеСтроки.Количество() <> 0 Тогда
- ОписаниеРоли = НайденныеСтроки[0];
- ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли);
- СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли);
- Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор();
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли);
-
- Если Строка.ЭтоРоль Тогда
- Если СкрытьРольПолныеПрава
- И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы"))Тогда
-
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.НомерКартинки = 6;
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- КонецЕсли;
- Иначе
- Если Строка.Строки.Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.НомерКартинки = 5;
- Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений)
-
- Если СтрокаДереваЗначений.Родитель = Неопределено Тогда
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы();
- Иначе
- ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель);
- ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы();
- КонецЕсли;
-
- Возврат ДанныеФормыКоллекцияЭлементовДерева;
+ Возврат УправлениеДоступомСлужебный.СформироватьДанныеВыбораЗначенияДоступа(
+ Текст,
+ ВидДоступа,
+ ВключаяГруппы);
КонецФункции
-
-&НаСервере
-Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить);
+&НаСервереБезКонтекста
+Процедура НачальноеЗаполнениеПрофилейГруппДоступа(Знач Профиль = Неопределено,
+ Знач ОбновитьГруппыДоступа = Ложь,
+ Знач НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа = Истина) Экспорт
- Если ИдентификаторСтроки = Неопределено Тогда
- // Обработка всех
- КоллекцияРолей = КоллекцияРолей();
- КоллекцияРолей.Очистить();
- Если Добавить Тогда
- ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли();
- Для каждого ОписаниеРоли Из ВсеРоли Цикл
- Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда
- КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- Если ПоказатьТолькоВыбранныеРоли Тогда
- Если КоллекцияРолей.Количество() > 0 Тогда
- ОбновитьДеревоРолей();
- Иначе
- Роли.ПолучитьЭлементы().Очистить();
- КонецЕсли;
- // Возврат
- Возврат;
- // Возврат
- КонецЕсли;
- Иначе
- ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки);
- Если ТекущиеДанные.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЕсли;
-
- ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы());
-
- Модифицированность = Истина;
+ УправлениеДоступомСлужебный.НачальноеЗаполнениеПрофилейГруппДоступа(
+ Профиль,
+ ОбновитьГруппыДоступа,
+ НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа);
КонецПроцедуры
-&НаСервере
-Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить)
+&НаСервереБезКонтекста
+Функция ОписаниеПоставляемогоПрофиляНаСервере(Знач Профиль)
- НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль));
+ Возврат УправлениеДоступомСлужебный.ОписаниеПоставляемогоПрофиля(Профиль);
- Если Добавить Тогда
- Если НайденныеРоли.Количество() = 0 Тогда
- КоллекцияРолей().Добавить().Роль = Роль;
- КонецЕсли;
- Иначе
- Если НайденныеРоли.Количество() > 0 Тогда
- КоллекцияРолей().Удалить(НайденныеРоли[0]);
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить)
-
- Для каждого Строка Из Коллекция Цикл
- Если Строка.ЭтоРоль Тогда
- ДобавитьУдалитьРоль(Строка.Имя, Добавить);
- Иначе
- ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить);
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция)
-
- Индекс = Коллекция.Количество()-1;
-
- Пока Индекс >= 0 Цикл
- Строка = Коллекция[Индекс];
-
- Если Строка.ЭтоРоль Тогда
- Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0;
- Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда
- Коллекция.Удалить(Индекс);
- КонецЕсли;
- Иначе
- ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы());
- Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда
- Коллекция.Удалить(Индекс);
- Иначе
- Строка.Пометка = Истина;
- Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл
- Если НЕ Элемент.Пометка Тогда
- Строка.Пометка = Ложь;
- Прервать;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
- Индекс = Индекс-1;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаСервере
-Процедура ДобавитьИменаНесуществующихРолей(ДеревоРолей)
-
- // Добавление несуществующих ролей
- Для каждого Строка Из КоллекцияРолей() Цикл
- Если ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, Строка.Роль), Истина).Количество() = 0 Тогда
- СтрокаДерева = ДеревоРолей.Строки.Вставить(0);
- СтрокаДерева.ЭтоРоль = Истина;
- СтрокаДерева.Имя = Строка.Роль;
- СтрокаДерева.Синоним = "? " + Строка.Роль;
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
+КонецФункции
diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html
index aa0c8dd34..1082fca26 100644
--- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html
+++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Как правило, настройка профилей групп доступа обычно выполняется при внедрении и конфигурировании прикладного решения. Они предназначены для создания готовых подборок разрешенных действий (ролей), содержащих права доступа к объектам метаданных, и "разрезов" ограничения этих прав (видов доступа), которые предполагается использовать в группах доступа.
С помощью профилей становится возможным:
а) задать общий список ролей для некоторой группы пользователей системы. Например, для менеджеров может быть определен профиль "Менеджер" с ролями:
diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl
index 7530723f8..b65674fd3 100644
--- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -13,7 +15,7 @@
// Заполнение множества возможных пустых ссылок, используемых как типы ссылок.
Если Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда
- ТипыСсылок.Загрузить(УправлениеДоступомСерверПовтИсп.ТипыСсылок());
+ ТипыСсылок.Загрузить(УправлениеДоступомСлужебныйПовтИсп.ТипыСсылок());
ИначеЕсли ТипыСсылок.Количество() <> 0 Тогда
ТипыСсылок.Очистить();
КонецЕсли;
@@ -44,7 +46,7 @@
КонецЦикла;
// Удаление всегда используемых видов доступа.
- ВидыДоступаИспользуемыеВсегда = УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаИспользуетсяВсегда", Истина));
+ ВидыДоступаИспользуемыеВсегда = УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаИспользуетсяВсегда", Истина));
Для каждого СвойстваВидаДоступа Из ВидыДоступаИспользуемыеВсегда Цикл
Для каждого Строка ИЗ ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа", СвойстваВидаДоступа.ВидДоступа)) Цикл
ВидыДоступа.Удалить(Строка);
@@ -55,7 +57,7 @@
Если Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда
ПоставляемыйПрофильИзменен = Ложь;
Иначе
- ПоставляемыйПрофильИзменен = УправлениеДоступомСобытия.ПоставляемыйПрофильИзменен(ЭтотОбъект);
+ ПоставляемыйПрофильИзменен = УправлениеДоступомСлужебный.ПоставляемыйПрофильИзменен(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
@@ -130,7 +132,7 @@
Если НЕ ЭтоГруппа Тогда
Если ДополнительныеСвойства.Свойство("ОбновитьГруппыДоступаПрофиля") Тогда
- УправлениеДоступом.ОбновитьГруппыДоступаПрофиля(Ссылка, Ложь);
+ УправлениеДоступомСлужебный.ОбновитьГруппыДоступаПрофиля(Ссылка, Ложь);
КонецЕсли;
// Обновление таблиц и значений групп доступа.
@@ -145,8 +147,8 @@
Запрос.УстановитьПараметр("Профиль", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
- УправлениеДоступом.ОбновитьТаблицыГруппДоступа(Выборка.Ссылка);
- УправлениеДоступом.ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка);
+ УправлениеДоступомСлужебный.ОбновитьТаблицыГруппДоступа(Выборка.Ссылка);
+ УправлениеДоступомСлужебный.ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка);
КонецЦикла;
Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") Тогда
@@ -192,7 +194,7 @@
//
Процедура ЗаполнитьТаблицыРолейПрофиляГруппДоступа(Знач Профиль)
- ПраваОМДРолей = УправлениеДоступомСерверПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей();
+ ПраваОМДРолей = УправлениеДоступомСлужебныйПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей();
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПраваОМДРолей", ПраваОМДРолей);
@@ -228,3 +230,5 @@
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl
index df06f6198..045723e86 100644
--- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl
+++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl
@@ -59,7 +59,7 @@
ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(ПараметрыОбработчика);
ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(ФормаДлительнойОперации);
- ЭтаФорма.ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина);
+ ЭтаФорма.ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина);
КонецЕсли;
КонецПроцедуры
diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form
index 5ac96c538..64a14c16e 100644
--- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form
+++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form
@@ -83,6 +83,7 @@
truetruetrue
+ trueruЧН=0; ЧГ=0
@@ -492,12 +493,12 @@
Заполнитьru
- Заполнить
+ Заполнить...1ru
- Заполнить
+ Указать все параметры ftp соединения одной строкойtrue
diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html
index 46e4bd6c7..4abed671f 100644
--- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html
+++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html
@@ -1,5 +1,5 @@
-
-
Позволяет указать параметры, необходимые для подключения к FTP ресурсу. Поле "Сервер и каталог" является обязательным для заполнения, остальные параметры обязательными не являются.
+
+
Позволяет указать параметры, необходимые для подключения к FTP ресурсу. Поле "Сервер и каталог" является обязательным для заполнения, остальные поля не обязательны.
mount -t cifs //server/share folder -o //domain/user, password=pwd - где //server/share - UNC путь к другому компьютеру , folder - путь каталога на Linux компьютере, например \home\shared, //domain/user - имя домена/пользователя, если нужно, pwd - пароль пользователя (если нужно).
Если имя и пароль не нужны, команда выглядит так: mount -t cifs //server/share folder
После этого в пути к тому указываем folder, например /home/shared
-
Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.
\ No newline at end of file
+
Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 1С:Предприятие.
Позволят выполнить выбранные рассылки или группы рассылок от имени текущего пользователя. Выполняться будут только те рассылки, у которых установлен флажок подготовленности.
+
Запускает выбранные рассылки и группы рассылок от имени текущего пользователя.
Роли исполнителей могут использоваться бизнес-процессами для ролевой маршрутизации задач. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, "Старший по залу"), а соответствие пользователей ролям задается в регистре сведений "Роли и исполнители" и используется механизмом бизнес-процессов для доставки поручений конкретным пользователям.
-
Роли, на которые не назначено ни одного исполнителя, подсвечиваются красным цветом.
-
Признак "Внешняя роль", указывает на то, что учет исполнителей этой роли ведется в другой информационной базе. Это используется для интеграции различных информационных баз между собой.
-
Предопределенная роль "Координатор выполнения задач" может использоваться для получения уведомлений о просроченных и зависших задачах по всем или выбранным объектам адресации. По умолчанию, пользователи, назначенные на роль "Координатор выполнения задач", получают уведомления по всем таким задачам, адресованным любым исполнителям. Если же требуется отслеживать просроченные и зависшие задачи только по определенным объектам адресации, то необходимо назначить себя на роль "Координатор выполнения задач" только по выбранным объектам адресации. Пример:
+
+
Роли исполнителей могут использоваться бизнес-процессами для ролевой маршрутизации задач. В этом случае поручение выдается не персонально исполнителю, а некоторой роли (например, "Старший по залу"), а соответствие пользователей ролям задается в списке "Роли и исполнители" и используется программой для доставки поручений конкретным пользователям. В определенных случаях, роли исполнителя бывает недостаточно, чтобы точно определить исполнителей. Тогда необходимо указывать основной и дополнительный объекты адресации.
+
Роли, на которые не назначено ни одного исполнителя, подсвечиваются красным цветом.
+
Признак "Внешняя роль" указывает на то, что учет исполнителей этой роли ведется в другой информационной базе. Роли с установленным признаком "Внешняя роль" используются для интеграции различных информационных баз между собой.
+
Предопределенная роль "Координатор выполнения задач" может использоваться для получения уведомлений о просроченных и зависших задачах по всем или выбранным объектам адресации. По умолчанию, пользователи, назначенные на роль "Координатор выполнения задач", получают уведомления по всем таким задачам, адресованным любым исполнителям. Если же требуется отслеживать просроченные и зависшие задачи только по определенным объектам адресации, то необходимо назначить себя на роль "Координатор выполнения задач" только по выбранным объектам адресации. Пример:
Роль исполнителя
Основной объект адресации (тип, значение)
@@ -20,8 +20,9 @@
Структурное подразделение, Отдел бухгалтерии
Проект, Проект по внедрению системы бухучета
Петров А.
-
Петров А. получает уведомления по всем просроченным и зависшим задачам по структурному поздразделению "Отдел бухгалтерии" и проекту "Проект по внедрению системы бухучета".*
* если исключить Иванова И. и Петрова А. из роли "Координатор выполнения задач", то Федоров К. будет получать уведомления также и по их объектам адресации.
-
Система отправляет уведомления Координаторам выполнения задач по электронной почте по адресу, указанному в контактной информации карточки пользователя.
+
Петров А. получает уведомления по всем просроченным и зависшим задачам по структурному поздразделению "Отдел бухгалтерии" и проекту "Проект по внедрению системы бухучета".*
+
* если исключить Иванова И. и Петрова А. из роли "Координатор выполнения задач", то Федоров К. будет получать уведомления также и по их объектам адресации.
+
Система отправляет уведомления "Координаторам выполнения задач" по электронной почте по адресу, указанному в контактной информации пользователя.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl
index c1151e856..9a0147780 100644
--- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl
+++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// Обработчики событий объекта
@@ -38,3 +40,5 @@
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo b/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo
index 2fa19b979..9433ee3e2 100644
--- a/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo
+++ b/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo
@@ -231,7 +231,7 @@
ТипыДополнительногоОбъектаАдресацииru
- Типы дополнительного объекта адресации
+ Дополнительные объекты адресацииChartOfCharacteristicTypesRef.ОбъектыАдресацииЗадач
@@ -254,7 +254,7 @@
ТипыОсновногоОбъектаАдресацииru
- Типы основного объекта адресации
+ Основные объекты адресацииChartOfCharacteristicTypesRef.ОбъектыАдресацииЗадач
@@ -282,6 +282,10 @@
Boolean
+
+ ru
+ Внешняя роль, исполнители которой определены в другой информационной базе
+
@@ -298,6 +302,10 @@
ExchangePlanRef.ОбменВнешнимиЗаданиямиExchangePlanRef.ОбменВнешнимиЗаданиямиС1СДокументооборот
+
+ ru
+ Информационная база, в которой определены исполнители внешней роли
+
diff --git a/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl b/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl
index e69de29bb..5ab5cdbd7 100644
--- a/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl
+++ b/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl
@@ -0,0 +1,18 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+
+Процедура ПередЗаписью(Отказ)
+
+ КаналСообщений = Наименование;
+
+ СодержимоеТела = ТелоСообщения.Получить();
+
+ // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса
+ СообщенияВМоделиСервиса.ПередОтправкойСообщения(КаналСообщений, СодержимоеТела);
+ // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса
+
+ ТелоСообщения = Новый ХранилищеЗначения(СодержимоеТела);
+
+КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/СтраныМира/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Help/ru.html
index 6d34161e0..c9d9f9dc4 100644
--- a/SSL/src/Catalogs/СтраныМира/Help/ru.html
+++ b/SSL/src/Catalogs/СтраныМира/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Общероссийский классификатор стран мира (ОКСМ) входит в состав Единой системы классификации и кодирования технико-экономической и социальной информации (ЕСКК) в Российской Федерации. ОКСМ предназначен для идентификации стран мира и используется в процессе обмена информацией при решении различных задач.
Структурно классификатор состоит из трёх блоков:
цифровой идентификации,
diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl
index 82bb1c69f..bb47e1f59 100644
--- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl
+++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl
@@ -148,7 +148,7 @@
Отказ = Ложь;
// запускаем выполнение обмена
- ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, ТекущиеДанные.Ссылка);
+ ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, ТекущиеДанные.Ссылка);
Если Отказ Тогда
Сообщение = НСтр("ru = 'Сценарий обмена выполнен с ошибками.'");
diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl
index c5d2c0f25..8bedf7ff1 100644
--- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl
@@ -313,9 +313,7 @@
Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда
- ИспользуемыеТранспорты = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы);
-
- Для Каждого Элемент Из ИспользуемыеТранспорты Цикл
+ Для Каждого Элемент Из ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы) Цикл
СписокВыбора.Добавить(Элемент, Строка(Элемент));
@@ -325,3 +323,9 @@
КонецПроцедуры
+&НаСервереБезКонтекста
+Функция ИспользуемыеТранспортыСообщенийОбмена(Знач УзелИнформационнойБазы)
+
+ Возврат ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы);
+
+КонецФункции
diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl
index 402f62658..24e3dc5e3 100644
--- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl
+++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
@@ -121,7 +123,7 @@
// Получает расписание регл. задания. Если регл. задание не задано, то возвращает пустое расписание (по умолчанию)
Функция ПолучитьРасписаниеВыполненияОбменаДанными(НастройкаВыполненияОбмена) Экспорт
- РегламентноеЗаданиеОбъект = ОбменДаннымиСервер.НайтиРегламентноеЗаданиеПоПараметру(НастройкаВыполненияОбмена.РегламентноеЗаданиеGUID);
+ РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(НастройкаВыполненияОбмена.РегламентноеЗаданиеGUID);
Если РегламентноеЗаданиеОбъект <> Неопределено Тогда
@@ -159,7 +161,7 @@
Функция СоздатьРегламентноеЗаданиеПриНеобходимости(Отказ, ТекущийОбъект)
- РегламентноеЗаданиеОбъект = ОбменДаннымиСервер.НайтиРегламентноеЗаданиеПоПараметру(ТекущийОбъект.РегламентноеЗаданиеGUID);
+ РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(ТекущийОбъект.РегламентноеЗаданиеGUID);
// при необходимости создаем регл. задание
Если РегламентноеЗаданиеОбъект = Неопределено Тогда
@@ -390,3 +392,5 @@
КонецЕсли;
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl
index dcb8b513c..c824ac7cc 100644
--- a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl
+++ b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
@@ -47,7 +49,7 @@
УстановитьПривилегированныйРежим(Истина);
// определяем регламентное задание
- РегламентноеЗаданиеОбъект = ОбменДаннымиСервер.НайтиРегламентноеЗаданиеПоПараметру(РегламентноеЗаданиеGUID);
+ РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(РегламентноеЗаданиеGUID);
Если РегламентноеЗаданиеОбъект <> Неопределено Тогда
@@ -66,3 +68,5 @@
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ТипыИнформацииИнформационногоЦентра/ТипыИнформацииИнформационногоЦентра.mdo b/SSL/src/Catalogs/ТипыИнформацииИнформационногоЦентра/ТипыИнформацииИнформационногоЦентра.mdo
new file mode 100644
index 000000000..9fcc2cc41
--- /dev/null
+++ b/SSL/src/Catalogs/ТипыИнформацииИнформационногоЦентра/ТипыИнформацииИнформационногоЦентра.mdo
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+ ТипыИнформацииИнформационногоЦентра
+
+ ru
+ Типы информации информационного центра
+
+ true
+ Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Description
+ Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Code
+ DontUse
+
+ Use
+ PredefinedDataName
+
+ Use
+
+
+
+
+ Use
+ Predefined
+
+ Use
+
+
+
+
+ Use
+ Ref
+
+ Use
+
+
+
+
+ Use
+ DeletionMark
+
+ Use
+
+
+
+
+ Use
+ IsFolder
+
+ Use
+
+
+
+
+ Use
+ Owner
+ true
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Parent
+ true
+
+ Use
+
+
+
+
+ Use
+ Description
+
+ ShowError
+ Use
+
+
+
+
+ Use
+ Code
+
+ Use
+
+
+
+ Use
+ Managed
+ Use
+ 2
+ true
+ 9
+ 50
+ String
+ Variable
+ true
+ true
+ AsDescription
+ InDialog
+ BothWays
+
diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html
index 019424fce..fd2a54851 100644
--- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html
+++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html
@@ -1,3 +1,3 @@
-
+
Если сервер 1С:Предприятия 8.2 работает под Linux, то путь к тому хранения файлов можно указать только локальный, например /home/path. Чтобы использовать UNC путь, нужно сделать на него ссылку. Для этого под правами администратора сделайте следующее:
mkdir folder --- вместо folder напишите имя каталога. например в каталоге /home делаем mkdir shared - создаст каталог shared с полным путем /home/shared.
mount -t cifs //server/share folder -o //domain/user, password=pwd - где //server/share - UNC путь к другому компьютеру , folder - путь каталога на Linux компьютере, например \home\shared, //domain/user - имя домена/пользователя, если нужно, pwd - пароль пользователя (если нужно). Если имя и пароль не нужны, команда выглядит так: mount -t cifs //server/share folder
После этого в пути к тому указываем folder, например /home/shared
\ No newline at end of file
diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl
index b194f45ed..e8cc74a90 100644
--- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl
@@ -31,7 +31,10 @@
Элементы.ПолныйПутьWindows.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать;
ТекущийРазмерВБайтах = 0;
- ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(Объект.Ссылка, ТекущийРазмерВБайтах);
+
+ СтандартныеПодсистемыПереопределяемый.ПодсчитатьРазмерФайловНаТоме(
+ Объект.Ссылка, ТекущийРазмерВБайтах);
+
ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024);
Если ТекущийРазмер = 0 И ТекущийРазмерВБайтах <> 0 Тогда
ТекущийРазмер = 1;
diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html
index 7258d9a00..7c3631198 100644
--- a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html
+++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Справочник "Тома хранения файлов" используется в том случае, если установлен режим хранения файлов "В томах на диске" (см. Настройка системы). В этом справочнике нужно указать один или несколько каталогов на жестком диске сервера, на котором работает система или других серверов в сети, которые будут использоваться для хранения в них всех файлов.
Для каждого тома необходимо указать его наименование, порядок заполнения и UNC-путь к каталогу тома для сервера под управлением Microsoft Windows и/или путь к каталогу для сервера под управлением Linux.
Также можно указать максимальный размер всех файлов на томе (квота тома). Если квота установлена равной нулю, то при размещении файлов в томе, она не проверяется. При установленном ненулевом свойстве «Максимальный размер», если суммарный размер файлов на томе уже превышает установленную квоту, то будет использован следующий по порядку заполнения том. Если ни на одном из доступных томов не будет достаточно места для размещения файла, то информация об этом будет записана в журнал регистрации и пользователю будет выдана ошибка.
diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl
index 3d9dcddeb..d0d18381e 100644
--- a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl
+++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
@@ -9,7 +11,9 @@
Если МаксимальныйРазмер <> 0 Тогда
ТекущийРазмерВБайтах = 0;
Если Не Ссылка.Пустая() Тогда
- ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(Ссылка, ТекущийРазмерВБайтах);
+
+ СтандартныеПодсистемыПереопределяемый.ПодсчитатьРазмерФайловНаТоме(
+ Ссылка, ТекущийРазмерВБайтах);
КонецЕсли;
ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024);
@@ -95,3 +99,5 @@
Возврат Истина;
КонецФункции // НайтиМаксимальныйНомерВерсии
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/КлассификаторВалют/Help/ru.html b/SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html
similarity index 96%
rename from SSL/src/Catalogs/КлассификаторВалют/Help/ru.html
rename to SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html
index 44a4dd867..f3a680d36 100644
--- a/SSL/src/Catalogs/КлассификаторВалют/Help/ru.html
+++ b/SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Справочник предназначен для хранения списка валют, используемых в организации.
Список валют можно редактировать, вводить новые записи или удалять имеющиеся.
Новую валюту можно добавить в справочник:
diff --git a/SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/ValueManagerModule.bsl b/SSL/src/Catalogs/УдалитьКлассификаторВалют/ManagerModule.bsl
similarity index 100%
rename from SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/ValueManagerModule.bsl
rename to SSL/src/Catalogs/УдалитьКлассификаторВалют/ManagerModule.bsl
diff --git a/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl b/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl
new file mode 100644
index 000000000..dc862d04c
--- /dev/null
+++ b/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl
@@ -0,0 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo b/SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo
similarity index 90%
rename from SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo
rename to SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo
index 2799d1404..0239c199d 100644
--- a/SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo
+++ b/SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo
@@ -7,14 +7,14 @@
- КлассификаторВалют
+ УдалитьКлассификаторВалютru
- Классификатор валют
+ (Не используется) Классификатор валютtrue
- Catalog.КлассификаторВалют.StandardAttribute.Description
- Catalog.КлассификаторВалют.StandardAttribute.Code
+ Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description
+ Catalog.УдалитьКлассификаторВалют.StandardAttribute.CodeDontUseUse
@@ -134,7 +134,6 @@
InDialogtrueBothWays
- Catalog.КлассификаторВалют.Form.ФормаВыбораНаименованиеПолное
@@ -180,13 +179,4 @@
UseUse
-
- ФормаВыбора
-
- ru
- Форма выбора
-
- PersonalComputer
- MobileDevice
-
diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверкаУчетнойЗаписи/CommandModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl
similarity index 100%
rename from SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверкаУчетнойЗаписи/CommandModule.bsl
rename to SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl
diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form
index c5b698986..4014fe18a 100644
--- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form
+++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form
@@ -1,25 +1,123 @@
- НастройкаПортовСервера
+ НастройкаСоединения24Порты
- 26
-
- ПортPOP3
- 12
+ 73
+
+ НомераПортов
+ 26
+
+ ПортPOP3
+ 12
+ true
+ true
+
+ true
+
+
+ ПортPOP3
+
+
+ ru
+ Порт сервера POP3
+
+
+ ПортPOP3РасширеннаяПодсказка
+ 80
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ПортPOP3КонтекстноеМеню
+ 13
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ 6
+ true
+ true
+ false
+ true
+ true
+ true
+ Normal
+
+
+
+ ПортSMTP
+ 14
+ true
+ true
+
+ true
+
+
+ ПортSMTP
+
+ Left
+
+ ru
+ Порт сервера SMTP
+
+
+ ПортSMTPРасширеннаяПодсказка
+ 82
+ Label
+ true
+ true
+
+ Left
+
+
+
+ ПортSMTPКонтекстноеМеню
+ 15
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ 6
+ true
+ true
+ false
+ true
+ true
+ true
+ Normal
+
+ truetruetrue
-
- ПортPOP3
-
+
+ ru
+ Номера портов
+
+
+ ru
+ Номера портов
+
- ПортPOP3РасширеннаяПодсказка
- 73
+ НомераПортовРасширеннаяПодсказка
+ 79Labeltruetrue
@@ -27,42 +125,28 @@
Left
Редактирование дополнительных настроек учетной записи. Эти настройки позволяют более тонко настроить такие параметры учетной записи, как аутентификация, порты серверов сообщений, время ожидания и другие параметры.
diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl
index d7305487e..410ffa65f 100644
--- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl
+++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl
@@ -57,6 +57,15 @@
КонецПроцедуры
+&НаСервере
+Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
+ Если Не ПустаяСтрока(Объект.АдресЭлектроннойПочты) И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(Объект.АдресЭлектроннойПочты) Тогда
+ ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
+ НСтр("ru = 'Почтовый адрес заполнен неверно'"), , "АдресЭлектроннойПочты", "Объект");
+ Отказ = Истина;
+ КонецЕсли;
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
@@ -81,3 +90,8 @@
КонецПроцедуры
+
+
+
+
+
diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html
index d349bbfa5..38e44a8a7 100644
--- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html
+++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Содержит информацию об учетных записях электронной почты, которые используются для получения и отправки сообщений по электронной почте.
Для учетных записей, получение и отправка с которых выполняется автоматически без участия пользователя, должен быть обязательно введен пароль. Также для корректной работы конфигурации обязательно должна быть настроена системную учетную запись электронной почты.
См. также:
diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl
index 48ea9b42e..bce477867 100644
--- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl
+++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl
@@ -1,3 +1,5 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
////////////////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС
@@ -29,3 +31,5 @@
ЗаполнитьОбъектЗначениямиПоУмолчанию();
КонецПроцедуры
+
+#КонецЕсли
\ No newline at end of file
diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo
index 587423d87..a815d0b42 100644
--- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo
+++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo
@@ -140,7 +140,7 @@
ru
- Адресат учетной записи. От его имени будут отсылаться почтовые сообщения. Например "Иван Петров".
+ Адресат учетной записи. От его имени будут отсылаться почтовые сообщения. Например, "Иван Петров".
@@ -190,6 +190,7 @@
+ ShowErrorUseUse
@@ -212,6 +213,7 @@
+ ShowErrorUseUse
@@ -282,6 +284,7 @@
+ ShowErrorUseUse
@@ -620,10 +623,10 @@
MobileDevice
- ПроверкаУчетнойЗаписи
+ ПроверитьУчетнуюЗаписьru
- Проверка учетной записи
+ Проверить учетную записьFormCommandBarImportant
@@ -631,5 +634,9 @@
trueAuto
+
+ ru
+ Выполнить проверку учетной записи
+
diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html
index 8693120d7..3a7e72798 100644
--- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html
+++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html
@@ -1 +1 @@
-Предельно допустимый размера файлов можно увеличить в настройках системы.
\ No newline at end of file
+Предельно допустимый размера файлов можно увеличить в настройках системы.
\ No newline at end of file
diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl
index bc7878986..361c50eb8 100644
--- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl
+++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl
@@ -4,7 +4,7 @@
ФайлыБольшие = Параметры.ФайлыБольшие;
- МаксимальныйРазмерФайла = Цел(ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла() / (1024 * 1024));
+ МаксимальныйРазмерФайла = Цел(ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла() / (1024 * 1024));
Сообщение =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html
index 76e3d9d3b..7f4b91b0c 100644
--- a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html
+++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Форма позволяет открыть любой отчет доступный пользователю не зависимо от настроек панели быстрого доступа.
-
В форме можно отметить какие отчеты нужно показывать на панели быстрого доступа. Для этого на форме расположена кнопка "Быстрый доступ".
-
Если требуется найти отчет по наименованию, то для облегчения поиска можно отключить разделы отчетов и воспользоваться кнопкой "Найти".
-
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ВсеОтчеты/Module.bsl b/SSL/src/CommonForms/ВсеОтчеты/Module.bsl
deleted file mode 100644
index ce9b6f751..000000000
--- a/SSL/src/CommonForms/ВсеОтчеты/Module.bsl
+++ /dev/null
@@ -1,637 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
-
-&НаСервере
-Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
-
- Если Параметры.Свойство("АвтоТест") Тогда
- Возврат;
- КонецЕсли;
-
- Если ТипЗнч(Параметры.Подсистемы) = Тип("СписокЗначений") Тогда
- ПутиПодсистемы = Параметры.Подсистемы;
- Иначе
- ПутиПодсистемы = Новый СписокЗначений;
- ПутиПодсистемы.Добавить(Параметры.Подсистемы);
- КонецЕсли;
-
- Закрепить = БиблиотекаКартинок.ЗакрепитьВариантОтчета;
- Открепить = БиблиотекаКартинок.ОткрепитьВариантОтчета;
-
- ЭтаФорма.Заголовок = Параметры.ИмяФормы;
-
- ГруппироватьВарианты = Истина;
-
- СписокОтчетов = ВариантыОтчетовПереопределяемый.СписокОтчетовПоддерживаемыхПодсистемой();
-
- ДеревоПодсистем = Новый ДеревоЗначений;
- ДеревоПодсистем.Колонки.Добавить("Подсистема");
- ДеревоПодсистем.Колонки.Добавить("Название");
-
- СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(ПутиПодсистемы, ДеревоПодсистем);
- Если СписокПодсистем.Количество() = 0 Тогда
- Возврат;
- КонецЕсли;
-
- МаксимальнаяДлинна = 0;
-
- Для каждого ЭлементСпПодсистема из СписокПодсистем Цикл
- МаксимальнаяДлинна = Макс(СтрДлина(ЭлементСпПодсистема.Значение), МаксимальнаяДлинна);
- КонецЦикла;
-
-
- // Получить варианты отчетов с разделами
- ТЗ = "ВЫБРАТЬ
- | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ,
- | ВариантыОтчетов.Наименование КАК Представление,
- | ВариантыОтчетов.Описание,
- | ВариантыОтчетов.БыстрыйДоступ,
- | ВариантыОтчетов.Наименование КАК Сортировка,
- | ВариантыОтчетов.ТипВариантаОтчета,
- | ВариантыОтчетов.Администратор,
- | ВариантыОтчетовПодсистемы.Подсистема
- |ИЗ
- | Справочник.ВариантыОтчетов.Подсистемы КАК ВариантыОтчетовПодсистемы
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов
- | ПО ВариантыОтчетовПодсистемы.Ссылка = ВариантыОтчетов.Ссылка
- |ГДЕ
- | (НЕ ВариантыОтчетов.ПометкаУдаления)
- | И ВЫРАЗИТЬ(ВариантыОтчетовПодсистемы.Подсистема КАК Строка("+Формат(МаксимальнаяДлинна, "ЧГ=0")+"))В (&Подсистемы)
- | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов)
- |
- |УПОРЯДОЧИТЬ ПО
- | Сортировка";
-
- Запрос = Новый Запрос(ТЗ);
- Запрос.УстановитьПараметр("Подсистемы", СписокПодсистем);
- Запрос.УстановитьПараметр("СписокОтчетов", СписокОтчетов);
- УстановитьПривилегированныйРежим(истина);
- ТаблицаВариантов = Запрос.Выполнить().Выгрузить();
- УстановитьПривилегированныйРежим(ложь);
-
- // роли вариантов
- ТЗ = "ВЫБРАТЬ
- | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ,
- | ИсключенныеПользователи.Пользователь КАК Пользователь,
- | НЕ ВариантыОтчетов.БыстрыйДоступ КАК БыстрыйДоступ
- |ИЗ
- | Справочник.ВариантыОтчетов КАК ВариантыОтчетов
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК ИсключенныеПользователи
- | ПО ВариантыОтчетов.Ссылка = ИсключенныеПользователи.Ссылка
- |ГДЕ
- | (НЕ ВариантыОтчетов.ПометкаУдаления)
- | И ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта В (&Ключи)
- | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов)
- | И (ИсключенныеПользователи.Пользователь = Пользователь)";
-
- Запрос.Текст = ТЗ;
- Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
- Запрос.УстановитьПараметр("Ключи", ТаблицаВариантов.ВыгрузитьКолонку("Ключ"));
- УстановитьПривилегированныйРежим(истина);
- ТаблицаПользователей = Запрос.Выполнить().Выгрузить();
- УстановитьПривилегированныйРежим(ложь);
-
- ТаблицаВариантов.Колонки.Добавить("Группировка", Новый ОписаниеТипов(,, Новый КвалификаторыСтроки()));
- ТаблицаВариантов.Колонки.Добавить("ВнешняяКоманда", Новый ОписаниеТипов(,, Новый КвалификаторыСтроки()));
-
- СписокГруппировок = Новый ТаблицаЗначений;
- СписокГруппировок.Колонки.Добавить("Группировка");
- СписокГруппировок.Колонки.Добавить("ГруппировкаПредставление");
-
- Для каждого СтрокаПодсистемы из ДеревоПодсистем.Строки Цикл
- ДанныеГруппировки = СписокГруппировок.Добавить();
- ДанныеГруппировки.Группировка = СтрокаПодсистемы.Подсистема;
- ДанныеГруппировки.ГруппировкаПредставление = "";
- Для каждого СтрокаГруппировки из СтрокаПодсистемы.Строки Цикл
- ДанныеГруппировки = СписокГруппировок.Добавить();
- ДанныеГруппировки.Группировка = СтрокаГруппировки.Подсистема;
- ДанныеГруппировки.ГруппировкаПредставление = СтрокаГруппировки.Название;
- КонецЦикла;
- КонецЦикла;
-
- // Дерево вариантов
-
- ГруппировкиВариантов = Новый Соответствие;
-
- ГруппировкиВариантовСмТакже = Новый СписокЗначений;
-
- СгруппированныйСписокВариантовОтчетов = Новый ДеревоЗначений;
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Ключ");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Представление");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Описание");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Группировка");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("ГруппировкаПредставление");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Сортировка");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("БыстрыйДоступ");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Администратор");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("ВнешняяКоманда");
-
- Если ГруппироватьВарианты Тогда
- Для каждого ГруппировкаВар из СписокГруппировок Цикл
- Если Найти(ГруппировкаВар.Группировка, "СмТакже") > 0 Тогда
- Продолжить;
- КонецЕсли;
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = ГруппировкаВар.Группировка;
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = ГруппировкаВар.ГруппировкаПредставление;
- ГруппировкиВариантов.Вставить(ГруппировкаВар.Группировка, СтрокаГруппировкиОтчета);
- КонецЦикла;
- КонецЕсли;
-
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета";
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Прочие'");
- ГруппировкиВариантов.Вставить("ПрочиеИПользовательскиеВариантыОтчета", СтрокаГруппировкиОтчета);
- СтрокаФиксированнаяГруппировка = СтрокаГруппировкиОтчета;
-
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = "СмТакже";
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'См. также'");
- ГруппировкиВариантов.Вставить("СмТакже", СтрокаГруппировкиОтчета);
- СтрокаГруппировкаСмТакже = СтрокаГруппировкиОтчета;
-
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = "ДополнительныеОтчеты";
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Дополнительные отчеты'");
- ГруппировкиВариантов.Вставить("ДополнительныеОтчеты", СтрокаГруппировкиОтчета);
- СтрокаГруппировкаДополнительныеОтчеты = СтрокаГруппировкиОтчета;
-
-
- //ДополнительныеКоманды
- ТаблицаДополнительныхКоманд = Новый ТаблицаЗначений;
- ТаблицаДополнительныхКоманд.Колонки.Добавить("УникальныйИдентификатор");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("Представление");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("Описание");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("БыстрыйДоступ");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("ПараметрКоманды");
-
- ВариантыОтчетовПереопределяемый.СписокДополнительныхКоманд(ТаблицаДополнительныхКоманд, ПутиПодсистемы);
-
- ПараметрыКоманд = Новый Массив;
-
- Если ТаблицаДополнительныхКоманд.Количество() > 0 Тогда
- Индекс = 0;
- Для Каждого СтрокаДополнительногоОтчета из ТаблицаДополнительныхКоманд Цикл
-
- СтрокаТаблицаВариантов = ТаблицаВариантов.Добавить();
- СтрокаТаблицаВариантов.Ключ = "Отчет.ДополнительнаяКоманда\"+СтрокаДополнительногоОтчета.УникальныйИдентификатор;
- СтрокаТаблицаВариантов.Представление = СтрокаДополнительногоОтчета.Представление;
- СтрокаТаблицаВариантов.Описание = СтрокаДополнительногоОтчета.Описание;
- СтрокаТаблицаВариантов.БыстрыйДоступ = СтрокаДополнительногоОтчета.БыстрыйДоступ;
- СтрокаТаблицаВариантов.Сортировка = СтрокаДополнительногоОтчета.Представление;
- СтрокаТаблицаВариантов.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ДополнительнаяКоманда;
- СтрокаТаблицаВариантов.Подсистема = "ДополнительныеОтчеты";
- СтрокаТаблицаВариантов.ВнешняяКоманда = Истина;
-
- СтрокаЗначенияКоманды = ЗначениеПараметровКоманд.Добавить();
- СтрокаЗначенияКоманды.Ключ = СтрокаДополнительногоОтчета.УникальныйИдентификатор;
- СтрокаЗначенияКоманды.ИндексПозицииЭлемента = Индекс;
- ПараметрыКоманд.Добавить(Новый ФиксированнаяСтруктура(СтрокаДополнительногоОтчета.ПараметрКоманды));
- Индекс = Индекс + 1;
-
- КонецЦикла;
- КонецЕсли;
-
- МассивПараметровКомманд = Новый ФиксированныйМассив(ПараметрыКоманд);
-
- // Составим список отчетов
- СоответствиеВариантовНомеруСортировки = Новый Соответствие;
-
- Для каждого СтрокаВариантаОтчета из ТаблицаВариантов Цикл
-
- Если НЕ ГруппироватьВарианты или НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Подсистема ) Тогда
- СтрокаВариантаОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета";
- Иначе
- Если Найти(СтрокаВариантаОтчета.Подсистема, "СмТакже") > 0 Тогда
- СтрокаВариантаОтчета.Группировка = "СмТакже";
- ИначеЕсли СтрокаВариантаОтчета.Подсистема = СтрокаВариантаОтчета.Подсистема Тогда
- Для каждого ГруппировкаВараинта из ГруппировкиВариантов Цикл
- Если СтрокаВариантаОтчета.Подсистема = ГруппировкаВараинта.Ключ Тогда
- СтрокаВариантаОтчета.Группировка = ГруппировкаВараинта.Ключ;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
- СоответствиеВариантовНомеруСортировки.Вставить(СтрокаВариантаОтчета.Ключ, СтрокаВариантаОтчета.Сортировка);
- КонецЦикла;
-
- Для каждого СтрокаВарианта из ТаблицаВариантов Цикл
- БыстрыйДоступ = СтрокаВарианта.БыстрыйДоступ;
- СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, Пользователи.ТекущийПользователь()));
- Для каждого СтрокаПользователи из СтрокиПользователи Цикл
- БыстрыйДоступ = СтрокаПользователи.БыстрыйДоступ;
- КонецЦикла;
-
- Если СтрокаВарианта.Группировка = Неопределено Тогда
- НаборСтрок = СтрокаФиксированнаяГруппировка.Строки;
- Иначе
- НаборСтрок = ГруппировкиВариантов[СтрокаВарианта.Группировка].Строки;
- КонецЕсли;
- Если НаборСтрок.НайтиСтроки(Новый Структура("Ключ", СтрокаВарианта.Ключ)).Количество() = 0 Тогда
- СтрокаВариантаОтчета = НаборСтрок.Добавить();
- ЗаполнитьЗначенияСвойств(СтрокаВариантаОтчета, СтрокаВарианта);
- Если СтрокаВарианта.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет Тогда
- СтрокаВариантаОтчета.Ключ = СтрокаВарианта.Ключ + "_Отчет_";
- КонецЕсли;
- СтрокаВариантаОтчета.БыстрыйДоступ = БыстрыйДоступ;
- СтрокаВариантаОтчета.Сортировка = СоответствиеВариантовНомеруСортировки[СтрокаВарианта.Ключ];
- Если НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Сортировка) Тогда
- СтрокаВариантаОтчета.Сортировка = "ЯЯ9999999999999";
- КонецЕсли;
- КонецЕсли;
-
- КонецЦикла;
-
- Для каждого СтрокаГруппировки из СгруппированныйСписокВариантовОтчетов.Строки Цикл
-
- Если СтрокаГруппировки.Строки.Количество() > 0 Тогда
-
- Если СтрокаГруппировки.ГруппировкаПредставление = "" Тогда
- ЭлементыГруппы = ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы();
- ИмяГруппировки = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаГруппировки.Группировка);
-
- Иначе
- ЭлементГруппирвоки = ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы().Добавить();
- ЭлементГруппирвоки.Название = СтрокаГруппировки.ГруппировкаПредставление;
- ЭлементыГруппы = ЭлементГруппирвоки.ПолучитьЭлементы();
- ИмяГруппировки = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаГруппировки.Группировка);
- КонецЕсли;
-
- ИмяГруппировки = "_ГруппаРаздела_" + ИмяГруппировки;
-
- Для каждого СтрокаВарианта из СтрокаГруппировки.Строки Цикл
-
- ИмяОтчета = СтрокаВарианта.Ключ;
-
- ПозицияВарианта = Найти(ИмяОтчета, "\");
- ИмяОтчета = Лев(ИмяОтчета, ПозицияВарианта-1);
- ИмяОтчета = СтрЗаменить(ИмяОтчета, "Отчет.", "");
-
- СодержитсяВФО = Ложь;
- ДоступенПоФО = Ложь;
-
- Если Найти(ИмяОтчета, "ДополнительнаяКоманда") = 0 Тогда
- Отчет = Метаданные.Отчеты.Найти(ИмяОтчета);
- Если Отчет = Неопределено Тогда
- Продолжить;
- КонецЕсли;
-
- ЕстьПравоПросмотра = ПравоДоступа("Просмотр", Отчет);
- Если НЕ ЕстьПравоПросмотра Тогда
- Продолжить;
- КонецЕсли;
-
- ПараметрыФО = Новый Структура("");
- ДоступенПоФО = Ложь;
- СодержитсяВФО = Ложь;
- Для каждого Опция из Метаданные.ФункциональныеОпции Цикл
-
- Если Опция.Состав.Найти(Отчет.Имя) = Неопределено Тогда
- Продолжить;
- КонецЕсли;
-
- СодержитсяВФО = Истина;
-
- ЗначениеФО = ПолучитьФункциональнуюОпцию(Опция.Имя, ПараметрыФО);
- Если ТипЗнч(ЗначениеФО) = Тип("Булево") Тогда
- Если ЗначениеФО Тогда
- ДоступенПоФО = Истина;
- Прервать;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- Иначе
- СодержитсяВФО = Ложь;
- ДоступенПоФО = Истина;
- КонецЕсли;
-
- Если СодержитсяВФО И НЕ ДоступенПоФО Тогда
- Продолжить;
- КонецЕсли;
-
- Элемент = ЭлементыГруппы.Добавить();
- Элемент.Использование = СтрокаВарианта.БыстрыйДоступ;
- Элемент.Название = СтрокаВарианта.Представление;
- Элемент.Описание = СтрокаВарианта.Описание;
- Элемент.Автор = СтрокаВарианта.Администратор;
- Элемент.Ключ = СтрокаВарианта.Ключ;
- Элемент.ВнешняяКоманда = СтрокаВарианта.ВнешняяКоманда;
-
- Если Элемент.Использование Тогда
- Элемент.Картинка = Закрепить;
- Иначе
- Элемент.Картинка = Открепить;
- КонецЕсли;
-
- Ключ = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаВарианта.Ключ);
- Элемент.НазваниеЭлемента = Ключ + ИмяГруппировки;
-
- ЭлементСтроки = СписокНастройкиВидимостиВариантов.Добавить();
- ЭлементСтроки.Использование = СтрокаВарианта.БыстрыйДоступ;
- ЭлементСтроки.Название = СтрокаВарианта.Представление;
- ЭлементСтроки.Описание = СтрокаВарианта.Описание;
- ЭлементСтроки.Автор = СтрокаВарианта.Администратор;
- ЭлементСтроки.Ключ = СтрокаВарианта.Ключ;
- ЭлементСтроки.Идентификатор = Элемент.ПолучитьИдентификатор();
- Элемент.Идентификатор = ЭлементСтроки.ПолучитьИдентификатор();
- Элемент.ВнешняяКоманда = СтрокаВарианта.ВнешняяКоманда;
-
- Если ЭлементСтроки.Использование Тогда
- ЭлементСтроки.Картинка = Закрепить;
- Иначе
- ЭлементСтроки.Картинка = Открепить;
- КонецЕсли;
-
- Ключ = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаВарианта.Ключ);
- Элемент.НазваниеЭлемента = Ключ + ИмяГруппировки;
-
- КонецЦикла;
-
- КонецЕсли;
- КонецЦикла;
-
- МассивНаУдаление = Новый Массив;
-
- Для каждого СтрокаГруппировки из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл
- Если СтрокаГруппировки.ПолучитьЭлементы().Количество() = 0 и СтрокаГруппировки.Ключ = "" Тогда
- МассивНаУдаление.Добавить(СтрокаГруппировки);
- КонецЕсли;
- КонецЦикла;
-
- Для каждого СтрокаНаУдаление из МассивНаУдаление Цикл
- ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы().Удалить(СтрокаНаУдаление);
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура ПриЗакрытии()
-
- СписокКлючейВарианта = Новый СписокЗначений;
- СписокЭлементовУправления = Новый СписокЗначений;
-
- Для каждого СтрокаГруппировки из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл
- Если СтрокаГруппировки.Ключ <> "" Тогда
- КлючОбъекта = СтрокаГруппировки.Ключ;
- ПозицияВарианта = Найти(КлючОбъекта, "\");
- ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1);
- КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта);
- СписокКлючейВарианта.Добавить(КлючОбъекта, , СтрокаГруппировки.Использование);
- СписокЭлементовУправления.Добавить(СтрокаГруппировки.НазваниеЭлемента, , СтрокаГруппировки.Использование);
- Иначе
- Для каждого ЭлементЗначение из СтрокаГруппировки.ПолучитьЭлементы() Цикл
- КлючОбъекта = ЭлементЗначение.Ключ;
- ПозицияВарианта = Найти(КлючОбъекта, "\");
- ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1);
- КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта);
- СписокКлючейВарианта.Добавить(КлючОбъекта, , ЭлементЗначение.Использование);
- СписокЭлементовУправления.Добавить(ЭлементЗначение.НазваниеЭлемента, , ЭлементЗначение.Использование);
- КонецЦикла;
- КонецЕсли;
- КонецЦикла;
-
- ОповеститьОВыборе(Новый Структура("СписокВариантов, СписокЭлементов", СписокКлючейВарианта, СписокЭлементовУправления));
-
-КонецПроцедуры
-
-////////////////////////////////////////////////////////////////////////////////
-// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоНастройкиВидимостиВариантов
-
-&НаКлиенте
-Процедура ДеревоНастройкиВидимостиВариантовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
-
- ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура ДеревоНастройкиВидимостиВариантовПриАктивизацииСтроки(Элемент)
-
- Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Использование Тогда
- Элементы.ФормаИспользовать.Пометка = Истина;
- Элементы.ФормаИспользоватьКП.Пометка = Истина;
- Элементы.ФормаИспользоватьСписок.Пометка = Истина;
- Иначе
- Элементы.ФормаИспользовать.Пометка = Ложь;
- Элементы.ФормаИспользоватьКП.Пометка = Ложь;
- Элементы.ФормаИспользоватьСписок.Пометка = Ложь;
- КонецЕсли;
-
- Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Ключ = "" Тогда
- Элементы.ФормаИспользовать.Доступность = Ложь;
- Элементы.ФормаИспользоватьКП.Доступность = Ложь;
- Элементы.ФормаОткрыть.Доступность = Ложь;
- Элементы.ФормаОткрытьКП.Доступность = Ложь;
- Элементы.ФормаОткрытьСписок.Доступность = Ложь;
- Элементы.ФормаИспользоватьСписок.Доступность = Ложь;
- Иначе
- Элементы.ФормаИспользовать.Доступность = Истина;
- Элементы.ФормаИспользоватьКП.Доступность = Истина;
- Элементы.ФормаОткрыть.Доступность = Истина;
- Элементы.ФормаОткрытьКП.Доступность = Истина;
- Элементы.ФормаОткрытьСписок.Доступность = Истина;
- Элементы.ФормаИспользоватьСписок.Доступность = Истина;
- КонецЕсли;
-
- Если Элемент.ТекущиеДанные <> Неопределено Тогда
- Ключ = Элемент.ТекущиеДанные.Ключ;
- Элементы.СписокНастройкиВидимостиВариантов.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор;
- КонецЕсли;
-
-КонецПроцедуры
-
-////////////////////////////////////////////////////////////////////////////////
-// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокНастройкиВидимостиВариантов
-
-&НаКлиенте
-Процедура СписокНастройкиВидимостиВариантовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
-
- ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура СписокНастройкиВидимостиВариантовПриАктивизацииСтроки(Элемент)
-
- Если Элемент.ТекущиеДанные <> Неопределено Тогда
- Ключ = Элемент.ТекущиеДанные.Ключ;
- Элементы.ДеревоНастройкиВидимостиВариантов.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор;
- КонецЕсли;
-
-КонецПроцедуры
-
-////////////////////////////////////////////////////////////////////////////////
-// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
-
-&НаКлиенте
-Процедура Использовать(Команда)
-
- Если Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные = Неопределено Тогда
- Возврат;
- КонецЕсли;
-
- СписокКлючейВариантов = Новый СписокЗначений;
- Если Элементы.ДеревоНастройкиВидимостиВариантов.ВыделенныеСтроки.Количество() > 0 Тогда
- Для каждого ИндексСтроки из Элементы.ДеревоНастройкиВидимостиВариантов.ВыделенныеСтроки Цикл
- ТекущиеДанные = ДеревоНастройкиВидимостиВариантов.НайтиПоИдентификатору(ИндексСтроки);
- Если СписокКлючейВариантов.НайтиПоЗначению(ТекущиеДанные.Ключ) = Неопределено Тогда
- СписокКлючейВариантов.Добавить(ТекущиеДанные.Ключ);
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- Если Элементы.СписокНастройкиВидимостиВариантов.ВыделенныеСтроки.Количество() > 0 Тогда
- Для каждого ИндексСтроки из Элементы.СписокНастройкиВидимостиВариантов.ВыделенныеСтроки Цикл
- ТекущиеДанные = СписокНастройкиВидимостиВариантов.НайтиПоИдентификатору(ИндексСтроки);
- Если СписокКлючейВариантов.НайтиПоЗначению(ТекущиеДанные.Ключ) = Неопределено Тогда
- СписокКлючейВариантов.Добавить(ТекущиеДанные.Ключ);
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- Если СписокКлючейВариантов.Количество() > 0 Тогда
-
- Для каждого СтрокаДерева из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл
-
- Если СтрокаДерева.Ключ <> "" Тогда
- Если СписокКлючейВариантов.НайтиПоЗначению(СтрокаДерева.Ключ) <> Неопределено Тогда
- ТекущиеДанные = СтрокаДерева;
- ТекущиеДанные.Использование = НЕ Элементы.ФормаИспользоватьКП.Пометка;
- Если ТекущиеДанные.Использование Тогда
- ТекущиеДанные.Картинка = Закрепить;
- Иначе
- ТекущиеДанные.Картинка = Открепить;
- КонецЕсли;
- КонецЕсли;
- Иначе
- УстановитьДоступностьПодчиненныхВариантов(СтрокаДерева, НЕ Элементы.ФормаИспользоватьКП.Пометка, СписокКлючейВариантов);
- КонецЕсли;
- КонецЦикла;
-
- Для каждого СтрокаСписка из СписокНастройкиВидимостиВариантов Цикл
- Если СписокКлючейВариантов.НайтиПоЗначению(СтрокаСписка.Ключ) <> Неопределено Тогда
- ТекущиеДанные = СтрокаСписка;
- ТекущиеДанные.Использование = НЕ Элементы.ФормаИспользоватьКП.Пометка;
- Если ТекущиеДанные.Использование Тогда
- ТекущиеДанные.Картинка = Закрепить;
- Иначе
- ТекущиеДанные.Картинка = Открепить;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
-
- Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Использование Тогда
- Элементы.ФормаИспользовать.Пометка = Истина;
- Элементы.ФормаИспользоватьКП.Пометка = Истина;
- Элементы.ФормаИспользоватьСписок.Пометка = Истина;
- Иначе
- Элементы.ФормаИспользовать.Пометка = Ложь;
- Элементы.ФормаИспользоватьКП.Пометка = Ложь;
- Элементы.ФормаИспользоватьСписок.Пометка = Ложь;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура ОткрытьОтчет(Команда)
-
- Если Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные = Неопределено Тогда
- Возврат;
- КонецЕсли;
-
- Ключ = Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные.Ключ;
-
- Если СокрЛП(Ключ) = "" Тогда
- Возврат;
- КонецЕсли;
-
- ПозицияВарианта = Найти(Ключ, "\");
- ИмяОтчета = Лев(Ключ, ПозицияВарианта-1);
- КлючВарианта = Прав(Ключ, СтрДлина(Ключ) - ПозицияВарианта);
-
- ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта);
-
- СтандартнаяОбработка = Истина;
-
- ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка);
-
- Если СтандартнаяОбработка Тогда
- Если ИмяОтчета = "Отчет.ДополнительнаяКоманда" Тогда
- ПараметрКоманды = ВариантыОтчетовКлиент.ПолучитьПараметрыКоманды(ЗначениеПараметровКоманд, МассивПараметровКомманд, КлючВарианта);
- Если ПараметрКоманды <> Неопределено Тогда
- ВариантыОтчетовКлиентПереопределяемый.ВыполнитьВнешнююКоманду(КлючВарианта, ПараметрКоманды);
- КонецЕсли;
- Иначе
- ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, , Ключ);
- КонецЕсли;
- КонецЕсли;
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура Разделы(Команда)
-
- Если Элементы.ФормаРазделы.Пометка Тогда
- Элементы.ФормаРазделы.Пометка = Ложь;
- Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаСписок;
- Элементы.ФормаНайти.Доступность = Истина;
- Элементы.ФормаОтменитьПоиск.Доступность = Истина;
- Иначе
- Элементы.ФормаРазделы.Пометка = Истина;
- Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаДерево;
- Элементы.ФормаНайти.Доступность = Ложь;
- Элементы.ФормаОтменитьПоиск.Доступность = Ложь;
- КонецЕсли;
-
-КонецПроцедуры
-
-////////////////////////////////////////////////////////////////////////////////
-// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-
-&НаКлиенте
-Процедура УстановитьДоступностьПодчиненныхВариантов(СтрокаДерева, Использование, СписокКлючейВариантов)
-
- Для каждого ПодчиненнаяСтрокаДерева из СтрокаДерева.ПолучитьЭлементы() Цикл
-
- Если ПодчиненнаяСтрокаДерева.Ключ <> "" Тогда
- Если СписокКлючейВариантов.НайтиПоЗначению(ПодчиненнаяСтрокаДерева.Ключ) <> Неопределено Тогда
- ТекущиеДанные = ПодчиненнаяСтрокаДерева;
- ТекущиеДанные.Использование = Использование;
- Если ТекущиеДанные.Использование Тогда
- ТекущиеДанные.Картинка = Закрепить;
- Иначе
- ТекущиеДанные.Картинка = Открепить;
- КонецЕсли;
- КонецЕсли;
- Иначе
- УстановитьДоступностьПодчиненныхВариантов(ПодчиненнаяСтрокаДерева, Использование, СписокКлючейВариантов);
- КонецЕсли;
- КонецЦикла;
-
-КонецПроцедуры
-
-&НаКлиенте
-Процедура ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
-
- Ключ = Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные.Ключ;
- Если СокрЛП(Ключ) = "" Тогда
- Возврат;
- КонецЕсли;
-
- ПозицияВарианта = Найти(Ключ, "\");
- ИмяОтчета = Лев(Ключ, ПозицияВарианта-1);
- КлючВарианта = Прав(Ключ, СтрДлина(Ключ)-ПозицияВарианта);
-
- ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта);
-
- СтандартнаяОбработка = Истина;
-
- ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка);
-
- Если СтандартнаяОбработка Тогда
- ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, Ключ);
- КонецЕсли;
-
-КонецПроцедуры
diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Form.form b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form
index 70f134598..72ca0d2ff 100644
--- a/SSL/src/CommonForms/ВходВОбластьДанных/Form.form
+++ b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form
@@ -9,7 +9,7 @@
true
- ЗначениеРазделителя
+ ОбластьДанныхЗначениеРазделителяРасширеннаяПодсказка
@@ -128,7 +128,7 @@
Lefttrue
- DontBlock
+ LockOwnertruetruetrue
@@ -140,10 +140,10 @@
autotrue
- ЗначениеРазделителя
+ ОбластьДанныхru
- Значение разделителя
+ Область данных1
diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl
index ba3d7e7bf..3ab5d8bb6 100644
--- a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl
+++ b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl
@@ -13,7 +13,7 @@
КонецЕсли;
КонецЕсли;
- Если НЕ УказаннаяОбластьДанныхЗаполнена(ЗначениеРазделителя) Тогда
+ Если НЕ УказаннаяОбластьДанныхЗаполнена(ОбластьДанных) Тогда
Ответ = Вопрос(НСтр("ru = 'Выбранная область данных не заполнена, продолжить вход?'"),
РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
@@ -22,7 +22,7 @@
КонецЕсли;
КонецЕсли;
- ВойтиВОбластьДанныхНаСервере(ЗначениеРазделителя);
+ ВойтиВОбластьДанныхНаСервере(ОбластьДанных);
ОбновитьИнтерфейс();
@@ -58,7 +58,7 @@
ОбновитьИнтерфейс();
- СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения();
+ СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(Истина);
КонецПроцедуры
@@ -66,13 +66,13 @@
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
&НаСервереБезКонтекста
-Функция УказаннаяОбластьДанныхЗаполнена(Знач ЗначениеРазделителя)
+Функция УказаннаяОбластьДанныхЗаполнена(Знач ОбластьДанных)
УстановитьПривилегированныйРежим(Истина);
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиДанных");
- ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ЗначениеРазделителя);
+ ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ОбластьДанных);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
Запрос = Новый Запрос;
@@ -83,7 +83,7 @@
| РегистрСведений.ОбластиДанных КАК ОбластиДанных
|ГДЕ
| ОбластиДанных.ОбластьДанных = &ОбластьДанных";
- Запрос.УстановитьПараметр("ОбластьДанных", ЗначениеРазделителя);
+ Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных);
НачатьТранзакцию();
Попытка
@@ -106,29 +106,29 @@
КонецФункции
&НаСервереБезКонтекста
-Процедура ВойтиВОбластьДанныхНаСервере(Знач ЗначениеРазделителя)
+Процедура ВойтиВОбластьДанныхНаСервере(Знач ОбластьДанных)
УстановитьПривилегированныйРежим(Истина);
- ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя);
+ ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных);
НачатьТранзакцию();
Попытка
- КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ЗначениеРазделителя));
+ КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ОбластьДанных));
ЗаблокироватьДанныеДляРедактирования(КлючОбласти);
Блокировка = Новый БлокировкаДанных;
Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных");
- Элемент.УстановитьЗначение("ОбластьДанных", ЗначениеРазделителя);
+ Элемент.УстановитьЗначение("ОбластьДанных", ОбластьДанных);
Элемент.Режим = РежимБлокировкиДанных.Разделяемый;
Блокировка.Заблокировать();
МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи();
- МенеджерЗаписи.ОбластьДанных = ЗначениеРазделителя;
+ МенеджерЗаписи.ОбластьДанных = ОбластьДанных;
МенеджерЗаписи.Прочитать();
Если Не МенеджерЗаписи.Выбран() Тогда
- МенеджерЗаписи.ОбластьДанных = ЗначениеРазделителя;
+ МенеджерЗаписи.ОбластьДанных = ОбластьДанных;
МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется;
МенеджерЗаписи.Записать();
КонецЕсли;
diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl
index 5a821ac1c..36791cf15 100644
--- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl
+++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl
@@ -47,6 +47,6 @@
&НаКлиенте
Процедура ОткрытьКаталог(Команда)
- ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(Файл);
+ ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(Файл);
КонецПроцедуры
diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl
index b6f441f8e..4bf88825a 100644
--- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl
+++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl
@@ -16,6 +16,6 @@
&НаКлиенте
Процедура ОткрытьКаталог(Команда)
- ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(Файл);
+ ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(Файл);
КонецПроцедуры
diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss
index aae641fc8..1dad03ad2 100644
--- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss
+++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss
@@ -2,6 +2,7 @@
+ falseИспользуетсяБезОбъектовАдресацииEqualfalse
diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form
index 853649a96..ef239a6d5 100644
--- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form
+++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form
@@ -9,37 +9,6 @@
КоманднаяПанельПользователи31
-
- ИспользоватьИерархию
- 52
- true
- true
-
- true
-
- false
-
- ИспользоватьИерархиюРасширеннаяПодсказка
- 57
- Label
- true
- true
-
- Left
-
-
- 0
- Normal
- Picture
- true
- true
- UserCmds
- true
-
- CommonPicture.ИерархическийСписок
-
- Auto
- truetrue
@@ -55,7 +24,7 @@
КоманднаяПанельПользователиРасширеннаяПодсказка
- 56
+ 58Labeltruetrue
@@ -102,7 +71,7 @@
trueНаименованиеРасширеннаяПодсказка
- 68
+ 69Labeltruetrue
@@ -139,10 +108,10 @@
СписокПользователиСтрокаПоиска
- 59
+ 60СписокПользователиСтрокаПоискаРасширеннаяПодсказка
- 61
+ 62Labeltruetrue
@@ -152,7 +121,7 @@
СписокПользователиСтрокаПоискаКонтекстноеМеню
- 60
+ 61trueСписокПользователи
@@ -162,10 +131,10 @@
СписокПользователиСостояниеПросмотра
- 62
+ 63СписокПользователиСостояниеПросмотраРасширеннаяПодсказка
- 64
+ 65Labeltruetrue
@@ -175,7 +144,7 @@
СписокПользователиСостояниеПросмотраКонтекстноеМеню
- 63
+ 64trueViewStatusAddition
@@ -186,10 +155,10 @@
СписокПользователиУправлениеПоиском
- 65
+ 66СписокПользователиУправлениеПоискомРасширеннаяПодсказка
- 67
+ 68Labeltruetrue
@@ -199,7 +168,7 @@
СписокПользователиУправлениеПоискомКонтекстноеМеню
- 66
+ 67trueSearchControlAddition
@@ -210,7 +179,7 @@
СписокПользователиРасширеннаяПодсказка
- 58
+ 59Labeltruetrue
@@ -281,7 +250,7 @@
ПользователиРасширеннаяПодсказка
- 55
+ 57Labeltruetrue
@@ -330,7 +299,7 @@
НаименованиеРолиРасширеннаяПодсказка
- 89
+ 90Labeltruetrue
@@ -365,10 +334,10 @@
СписокРолиСтрокаПоиска
- 80
+ 81СписокРолиСтрокаПоискаРасширеннаяПодсказка
- 82
+ 83Labeltruetrue
@@ -378,7 +347,7 @@
СписокРолиСтрокаПоискаКонтекстноеМеню
- 81
+ 82trueСписокРоли
@@ -388,10 +357,10 @@
СписокРолиСостояниеПросмотра
- 83
+ 84СписокРолиСостояниеПросмотраРасширеннаяПодсказка
- 85
+ 86Labeltruetrue
@@ -401,7 +370,7 @@
СписокРолиСостояниеПросмотраКонтекстноеМеню
- 84
+ 85trueViewStatusAddition
@@ -412,10 +381,10 @@
СписокРолиУправлениеПоиском
- 86
+ 87СписокРолиУправлениеПоискомРасширеннаяПодсказка
- 88
+ 89Labeltruetrue
@@ -425,7 +394,7 @@
СписокРолиУправлениеПоискомКонтекстноеМеню
- 87
+ 88trueSearchControlAddition
@@ -436,7 +405,7 @@
СписокРолиРасширеннаяПодсказка
- 79
+ 80Labeltruetrue
@@ -488,6 +457,49 @@
true
+
+ СписокРолиКомментарий
+ 53
+ true
+ true
+
+ true
+
+
+ Items.СписокРоли.CurrentData.Комментарий
+
+ Left
+
+ СписокРолиКомментарийРасширеннаяПодсказка
+ 100
+ Label
+ true
+ true
+
+ Left
+
+
+
+ СписокРолиКомментарийКонтекстноеМеню
+ 54
+ true
+
+ InputField
+ true
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ Normal
+
+ truetrue
@@ -495,7 +507,7 @@
ru
- Роли
+ Роли исполнителейru
@@ -503,7 +515,7 @@
РолиРасширеннаяПодсказка
- 78
+ 79Labeltruetrue
@@ -532,7 +544,7 @@
СтраницыРасширеннаяПодсказка
- 54
+ 56Labeltruetrue
@@ -560,7 +572,7 @@
falseВыбратьРасширеннаяПодсказка
- 53
+ 55Labeltruetrue
@@ -615,23 +627,27 @@
СписокПользователи.Подразделение
+
+ СписокПользователи.Ref
+ ВЫБРАТЬ
- СправочникПользователи.Ссылка,
- СправочникПользователи.ПометкаУдаления,
- СправочникПользователи.Предопределенный,
- СправочникПользователи.Наименование,
+ Пользователи.Ссылка,
+ Пользователи.ПометкаУдаления,
+ Пользователи.Предопределенный,
+ Пользователи.Наименование,
ВЫБОР
- КОГДА СправочникПользователи.ПометкаУдаления
+ КОГДА Пользователи.ПометкаУдаления
ТОГДА 0
- КОГДА СправочникПользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор
+ КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор
ТОГДА 4
ИНАЧЕ 1
КОНЕЦ КАК НомерКартинки
ИЗ
- Справочник.Пользователи КАК СправочникПользователи
+ Справочник.Пользователи КАК Пользователи
ГДЕ
- СправочникПользователи.Недействителен = ЛОЖЬ
+ Пользователи.Недействителен = ЛОЖЬ
+ И Пользователи.Служебный = ЛОЖЬ
Catalog.Пользователиtruetrue
@@ -656,6 +672,9 @@
true
+
+ СписокРоли.Ref
+ ВЫБРАТЬ
СправочникРолиИсполнителей.Ссылка,
@@ -731,6 +750,18 @@
Boolean
+
+ ТолькоПростыеРоли
+
+ Boolean
+
+
+
+ БезВнешнихРолей
+
+ Boolean
+
+
diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html
index af7fba002..83dab574e 100644
--- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html
+++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В качестве исполнителя можно выбирать конкретного пользователя или роль, предназначенную для создаваемого бизнес-процесса.
Если выбирается исполнитель, то бизнес-процесс будет адресован этому исполнителю. Если выполняется выбор роли, то бизнес-процесс адресуется тому исполнителю, который в момент рассмотрения задачи назначен исполнителем этой роли. В процессе работы роли могут быть переназначены. В этом случае задача автоматически переадресуется новым исполнителям.
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl
index ef9f4ba15..88b717b72 100644
--- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl
+++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl
@@ -4,14 +4,11 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
- ТолькоПростыеРоли = Ложь;
- Если Параметры.Свойство("ТолькоПростыеРоли", ТолькоПростыеРоли) И ТолькоПростыеРоли = Истина Тогда
+ Если Параметры.ТолькоПростыеРоли Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
- СписокРоли.Отбор, "ИспользуетсяБезОбъектовАдресации", Истина);
+ СписокРоли.Отбор, "ИспользуетсяБезОбъектовАдресации", Истина,,Истина);
КонецЕсли;
-
- БезВнешнихРолей = Ложь;
- Если Параметры.Свойство("БезВнешнихРолей", БезВнешнихРолей) И БезВнешнихРолей = Истина Тогда
+ Если Параметры.БезВнешнихРолей = Истина Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(
СписокРоли.Отбор, "ВнешняяРоль", Ложь);
КонецЕсли;
@@ -19,22 +16,18 @@
ОбновитьЗначениеПараметраКомпоновкиДанных(СписокПользователи, "ПустойУникальныйИдентификатор",
Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"));
- Если Параметры.Свойство("Исполнитель") Тогда
+ Если ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.Пользователи") Тогда
- Если ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.Пользователи") Тогда
-
- ТекущийЭлемент = Элементы.СписокПользователи;
- Элементы.СписокПользователи.ТекущаяСтрока = Параметры.Исполнитель;
-
- ИначеЕсли ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") Тогда
-
- Элементы.Страницы.ТекущаяСтраница = Элементы.Роли;
- ТекущийЭлемент = Элементы.СписокРоли;
- Элементы.СписокРоли.ТекущаяСтрока = Параметры.Исполнитель;
-
- КонецЕсли;
+ ТекущийЭлемент = Элементы.СписокПользователи;
+ Элементы.СписокПользователи.ТекущаяСтрока = Параметры.Исполнитель;
- КонецЕсли;
+ ИначеЕсли ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") Тогда
+
+ Элементы.Страницы.ТекущаяСтраница = Элементы.Роли;
+ ТекущийЭлемент = Элементы.СписокРоли;
+ Элементы.СписокРоли.ТекущаяСтрока = Параметры.Исполнитель;
+
+ КонецЕсли;
КонецПроцедуры
@@ -53,7 +46,7 @@
Процедура СписокРолиВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
- ОповеститьОВыборе(Значение);
+ ВыборРоли(Значение);
КонецПроцедуры
@@ -84,8 +77,8 @@
ВыбранноеЗначение, Неопределено, Неопределено);
Иначе
Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя",
- Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации",
- ВыбранноеЗначение, Неопределено, Неопределено),
+ Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации, ВыборОбъектаАдресации",
+ ВыбранноеЗначение, Неопределено, Неопределено, Истина),
ЭтаФорма);
КонецЕсли;
diff --git a/SSL/src/CommonForms/ВыборКонтакта/Form.form b/SSL/src/CommonForms/ВыборКонтакта/Form.form
index 882604f80..76da40f1c 100644
--- a/SSL/src/CommonForms/ВыборКонтакта/Form.form
+++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form
@@ -835,6 +835,10 @@
Lefttrue
+
+ OnActivateRow
+ ГруппыПользователейПриАктивизацииСтроки
+ ГруппыПользователейСтрокаПоиска165
@@ -942,7 +946,7 @@
truetrue
- ГруппыПользователей.DefaultPicture
+ ГруппыПользователей.НомерКартинкиCommonPicture.СостоянияПользователей
@@ -1530,9 +1534,32 @@
СписокПользователей.IsFolder
+ ВЫБРАТЬ
+ Пользователи.Ссылка,
+ Пользователи.ПометкаУдаления,
+ Пользователи.Предопределенный,
+ Пользователи.Наименование,
+ ВЫБОР
+ КОГДА Пользователи.ПометкаУдаления
+ ТОГДА 0
+ ИНАЧЕ 1
+ КОНЕЦ КАК НомерКартинки
+ИЗ
+ Справочник.Пользователи КАК Пользователи
+ГДЕ
+ Пользователи.Служебный = ЛОЖЬ
+ И ИСТИНА В
+ (ВЫБРАТЬ
+ ИСТИНА
+ ИЗ
+ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
+ ГДЕ
+ СоставыГруппПользователей.Пользователь = Пользователи.Ссылка
+ И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей)Catalog.Пользователиtruetrue
+ truetruetrue
diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl
index 1f2bf485c..815ac104a 100644
--- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl
+++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl
@@ -113,6 +113,13 @@
КонецПроцедуры
+&НаКлиенте
+Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент)
+
+ СписокПользователей.Параметры.УстановитьЗначениеПараметра("ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока);
+
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
@@ -433,3 +440,5 @@
Элементы.КомандаОбновитьИндексППД.Доступность = Не ИндексАктуален;
КонецПроцедуры
+
+
diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl
index c29c393ba..c6067ef2c 100644
--- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl
+++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl
@@ -25,7 +25,8 @@
СвойстваОбъектаМетаданных = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СвойстваОбъектаМетаданных(Параметры.ПолноеИмяТаблицыБазыКорреспондента);
- Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда
+ Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_1_1_7
+ ИЛИ Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда
ТаблицаБазыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбъектыТаблицы_2_0_1_6(Параметры.ПолноеИмяТаблицыБазыКорреспондента));
@@ -39,10 +40,18 @@
СтрокаСообщенияОбОшибке = "";
- Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда
- WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси_2_0_1_6(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке);
+ Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_1_1_7 Тогда
+
+ WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке);
+
+ ИначеЕсли Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда
+
+ WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке);
+
Иначе
- WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке);
+
+ WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке);
+
КонецЕсли;
Если WSПрокси = Неопределено Тогда
@@ -50,7 +59,8 @@
Возврат;
КонецЕсли;
- Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда
+ Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_1_1_7
+ ИЛИ Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда
ДанныеБазыКорреспондента = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBData(Параметры.ПолноеИмяТаблицыБазыКорреспондента));
diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl
index db6654e1a..8f40df5b3 100644
--- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl
+++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl
@@ -56,9 +56,12 @@
КонецЕсли;
Если Параметры.Свойство("ВыборЕдинственного", ВыборЕдинственного) И ВыборЕдинственного Тогда
-
Элементы.Пометка.Видимость = Ложь;
-
+ КонецЕсли;
+
+ Если Параметры.Свойство("Заголовок") Тогда
+ АвтоЗаголовок = Ложь;
+ Заголовок = Параметры.Заголовок;
КонецЕсли;
Параметры.Свойство("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора);
diff --git a/SSL/src/CommonForms/ВыборПодписей/Help/ru.html b/SSL/src/CommonForms/ВыборПодписей/Help/ru.html
index a5bd8b2fc..d9de7115f 100644
--- a/SSL/src/CommonForms/ВыборПодписей/Help/ru.html
+++ b/SSL/src/CommonForms/ВыборПодписей/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В форме выбираются подписи, которые требуется сохранять вместе с файлом.
При выполнении команды "Сохранить с ЭЦП", если персональная настройка "Действия при сохранении с ЭЦП" установлена в "Спрашивать", открывается данная форма.
Установите флажки для подписей, которые надо сохранить вместе с файлом, и нажмите "OK".
Форма открывается командой "Все действия - ЭЦП и шифрование - Добавить ЭЦП из файла" карточки файла.
В форме следует выбрать один или несколько файлов с электронными цифровыми подписями (ЭЦП), для каждого из них указать автора подписи и комментарий подписи.
Этот бизнес-процесс используется для автоматизации исполнения распоряжений руководителя одним или несколькими исполнителями с одновременным контролем.
Если указано несколько исполнителей, то одного из них можно указать ответственным исполнителем. При старте этого бизнес-процесса соответствующие задачи на исполнение автоматически получат все исполнители по списку. Из задачи ответственного исполнителя имеется возможность просмотреть задачи остальных исполнителей.
Пользователь, указанный в поле "Контролер", получит задачу Контролировать одновременно с исполнителями. В обязанности контролера обычно входит слежение за сроками исполнения.
Если не был выполнен запуск бизнес-процесса, заполнение формы может быть выполнено на основании шаблона бизнес-процесса. Для этого необходимо выполнить команду "Заполнить по шаблону" на командной панели формы. Если для данного типа бизнес-процесса и вида предмета бизнес-процесса настроены шаблоны бизнес-процессов, то система предложит выбрать один из шаблонов для заполнения формы. Если был настроен только один шаблон, то заполнение формы произойдет автоматически.
В поле Наименование указывается наименование составного бизнес-процесса. Если бизнес-процесс создается по шаблону и в шаблоне задано наименование, то оно переносится в поле Наименование.
Бизнес-процесс "Обработка входящего документа" состоит из цепочки простых бизнес-процессов, определенных как шаблоны: Рассмотрение, Исполнение или Ознакомление и Поручение (поместить в дело).
Если не был выполнен запуск бизнес-процесса, заполнение формы может быть выполнено на основании шаблона бизнес-процесса. Для этого необходимо выполнить команду "Заполнить по шаблону" на командной панели формы. Если для данного типа бизнес-процесса и вида предмета бизнес-процесса настроены шаблоны бизнес-процессов, то система предложит выбрать один из шаблонов для заполнения формы. Если был настроен только один шаблон, то заполнение формы произойдет автоматически.
В поле Наименование указывается наименование составного бизнес-процесса. Если бизнес-процесс создается по шаблону и в шаблоне задано наименование, то оно переносится в поле Наименование.
Бизнес-процесс "Обработка исходящего документа" состоит из цепочки простых бизнес-процессов, определенных как шаблоны: Согласование, Утверждение и Регистрация.
Если не был выполнен запуск бизнес-процесса, заполнение формы может быть выполнено на основании шаблона бизнес-процесса. Для этого необходимо выполнить команду "Заполнить по шаблону" на командной панели формы. Если для данного типа бизнес-процесса и вида предмета бизнес-процесса настроены шаблоны бизнес-процессов, то система предложит выбрать один из шаблонов для заполнения формы. Если был настроен только один шаблон, то заполнение формы произойдет автоматически.
В поле Наименование указывается наименование составного бизнес-процесса. Если бизнес-процесс создается по шаблону и в шаблоне задано наименование, то оно переносится в поле Наименование.
Этот бизнес-процесс следует использовать для выдачи простых поручений сотрудникам.
После выполнения задачи исполнителем, она поступает на проверку проверяющему (по умолчанию - автор бизнес-процесса). Проверяющий имеет возможность вернуть исполнителю задачу на доработку. Пользователь, указанный в поле "Контролер", получит задачу одновременно с исполнителем. В обязанности Контролера входит слежение за сроками выполнения поручения.
Бизнес-процесс "Поручение" считается завершенным, после того как исполнитель выполнил свою задачу и проверяющий подтвердил выполнение, задача контролера при этом завершается автоматически.
Этот бизнес-процесс используется для автоматизации процесса рассмотрения документов руководителем. Сначала руководителю поступает задача "Рассмотреть", содержащая ссылку на документ. После того как руководитель рассмотрит документ и вынесет резолюцию, автору поступает задача "Обработать резолюцию". Из этой задачи автор имеет возможность на основе текстовой резолюции руководителя создать бизнес-процесс "Исполнение" или "Ознакомление".
Этот бизнес-процесс можно создавать непосредственно из карточки документа при помощи меню "Создать бизнес-процесс".
При выборе рассматривающего можно указать не только конкретного пользователя, но и роль.
Этот бизнес-процесс обходит всех участников согласования (рецензентов) по заранее составленному списку, после чего возвращается к автору (инициатору бизнес-процесса). В случае отрицательного результата согласования автор имеет возможность повторить согласование.
При заполнении списка рецензентов можно указывать как непосредственно исполнителя (пользователя), так и роли.
Предусмотрено три варианта обхода согласующих - "все вместе", "по очереди" и "смешанно". Если установлен тип согласования "все вместе", то задачи всем рецензентам формируется одновременно. При этом бизнес-процесс возвращается к автору после завершения задач всеми согласующими. Если установлен тип согласования "по очереди", то задача следующему рецензенту формируется только после завершения задачи предыдущему. При этом бизнес-процесс сразу возвращается к автору, как только один из согласующих принял отрицательное решение. Если установлен тип согласования "смешанно", то для каждого исполнителя можно указать порядок формирования задачи - вместе с предыдущим либо после предыдущего. В результате тип согласования "смешанно" позволяет сочетать этапы одновременного и последовательного согласования.
Этот бизнес-процесс используется для передачи документа на утверждение руководителю.
При старте бизнес-процесса руководителю поступает задача "Утвердить", содержащая ссылку на документ. После того как руководитель рассмотрит документ и отметит в задаче результат утверждения, автору поступает задача "Ознакомиться с результатами утверждения". В случае отрицательного результата из этой задачи автор может отправить документ на повторное утверждение.
Этот бизнес-процесс можно создавать непосредственно из карточки документа при помощи меню "Создать бизнес-процесс".
Справочник "Внутренние документы" служит для учета официальных информационно-справочных или организационно-распорядительных документов.
К каждому внутреннему документу можно присоединить один или несколько файлов. Учет файлов возможен, если настройка программы "Использовать файлы у внутренних документов" установлена.
Для документа следует задать:
diff --git a/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl b/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl
index 488286a6e..e5d19de99 100644
--- a/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl
+++ b/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl
@@ -262,7 +262,7 @@
Элементы.ФайлыЗаполнитьКопированием.Видимость = Ложь;
Если ЗначениеЗаполнено(ВнешнийОбъект) Тогда
- Если ФайловыеФункции.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда
+ Если ФайловыеФункцииСлужебный.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда
Элементы.ФайлыЗаполнитьКопированием.Видимость = Истина;
Элементы.ФайлыЗаполнитьКопированием.Доступность = (Файлы.Количество() = 0);
КонецЕсли;
@@ -1250,7 +1250,7 @@
Возврат;
КонецЕсли;
- СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла);
+ СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла);
Если СтрокиПути.Количество() >= 2 Тогда
Расширение = СтрокиПути[СтрокиПути.Количество()-1];
ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2];
diff --git a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Help/ru.html
index 40c857a30..adc9e9a77 100644
--- a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Справочник "Входящие документы" служит для учета официальной корреспонденции, поступающей в Вашу организацию от внешних адресатов.
К каждому входящему документу можно присоединить один или несколько файлов. Учет файлов возможен, если настройка программы "Использовать файлы у входящих документов" установлена.
Для документа следует задать:
diff --git a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl
index 27f66fbd5..3d1dec01c 100644
--- a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl
+++ b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl
@@ -262,7 +262,7 @@
Элементы.ФайлыЗаполнитьКопированием.Видимость = Ложь;
Если ЗначениеЗаполнено(ВнешнийОбъект) Тогда
- Если ФайловыеФункции.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда
+ Если ФайловыеФункцииСлужебный.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда
Элементы.ФайлыЗаполнитьКопированием.Видимость = Истина;
Элементы.ФайлыЗаполнитьКопированием.Доступность = (Файлы.Количество() = 0);
КонецЕсли;
@@ -1146,7 +1146,7 @@
Возврат;
КонецЕсли;
- СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла);
+ СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла);
Если СтрокиПути.Количество() >= 2 Тогда
Расширение = СтрокиПути[СтрокиПути.Количество()-1];
ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2];
diff --git a/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html
index 1ab497a6d..39b4a8773 100644
--- a/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html
@@ -1,3 +1,3 @@
-
+
На форме выбора исполнителя можно выбрать как пользователя, так и роль исполнителей.
Если для выбранной роли в 1С:Документообороте настроено использование объектов адресации, после выбора роли будет необходимо указать значения этих объектов адресации.
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html
index 623960f7b..9d4652a94 100644
--- a/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html
@@ -1,2 +1,2 @@
-
+
На форме "Выбор объектов адресации" указываются основной и дополнительный объекты адресации для выбранной в ходе заполнения карточки бизнес-процесса роли. Объекты адресации используются для точного определения исполнителя роли.
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ДокументооборотВыборОдногоТипаИзСоставногоТипа/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборОдногоТипаИзСоставногоТипа/Help/ru.html
index e0504966b..009b36cbf 100644
--- a/SSL/src/CommonForms/ДокументооборотВыборОдногоТипаИзСоставногоТипа/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотВыборОдногоТипаИзСоставногоТипа/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Выбор типа значения осуществляется, когда в поле на карточке объекта может быть указано значение нескольких типов. В таком случае сначала необходимо выбрать тип значения.
Для продолжения заполнения поля карточки выберите требуемый тип данных и нажмите кнопку "ОК".
На форме происходит выбор пользователя из системы 1С:Документооборот.
В левом списке показываются подразделения. При выборе подразделения в правом списке показываются пользователи, входящие в это подразделение, при этом уководитель подразделения указывается выделенным текстом. При выборе группы "Все пользователи" показываются все пользователи (независимо от вхождения в какое-либо из подразделений).
Для выбора пользователя необходимо выбрать его в правом списке и нажать кнопку "Выбрать".
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html
index 5af53d968..dc9b71b7c 100644
--- a/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html
@@ -1,2 +1,2 @@
-
+
Эта форма предназначена для выбора существующего файла в 1С:Документообороте при выполнении команды Создать - Выбрать из 1С:Документооборота.
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl b/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl
index 3ebe5bcfe..46b3ae7ad 100644
--- a/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl
+++ b/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl
@@ -61,7 +61,7 @@
НоваяСтрока.УникальныйИдентификатор = СведенияОФайле.objectId.id;
НоваяСтрока.ДатаСоздания = СведенияОФайле.creationDate;
- НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение);
+ НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение);
КонецЦикла;
КонецПроцедуры
diff --git a/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html b/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html
index 2c9c4f9bd..47fdbf529 100644
--- a/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В форме выводится информация о входящем, исходящем или внутреннем документе, соответствующем объекту внешней по отношению к 1С:Документооборот системы.
Внешнему объекту может соответствовать только один входящий, исходящий или внутренний документ в 1С:Документообороте. В поле "Документ" выводится наименование, номер и дата этого документа. Кнопка "Создать" позволяет создать новый документ, соответствующий внешнему объекту. Изменить или просмотреть уже созданный документ можно с помощью кнопки "Открыть". С помощью кнопки "Выбрать" можно привязать к внешнему объекту уже существующий в 1С:Документообороте документ.
В списке "Связанные документы" выводятся документы, связанные с документом, соответствующем внешнему объекту. Например, для договора в этом списке могут отображаться дополнительные соглашения, акты, спецификации и пр. Кнопка "Создать связанный" позволяет создать новый связанный документ, при этом требуется указать тип связи. Кнопка "Приложить связанный" позволяет сделать связанным уже существующий документ.
На форме отображается дерево бизнес-процессов и задач документооборота, предметами которых являются документы в 1С:Документооборот, связанные с текущим объектом.
Для запуска бизнес-процесса по основному документу документооборота, связанному с текущим объектом, необходимо нажать на кнопку "Создать бизнес-процесс документооборота...", расположенную на командной панели дерева. После этого необходимо выбрать тип создаваемого бизнес-процесса.
Для открытия карточки бизнес-процесса или задачи необходимо воспользоваться командой "Открыть карточку" или нажать клавишу F2.
Справочник "Исходящие документы" служит для учета официальной корреспонденции, которую Ваша организация отправляет внешним адресатам.
К каждому исходящему документу можно присоединить один или несколько файлов. Учет файлов возможен, если настройка программы "Использовать файлы у исходящих документов" установлена.
Для документа следует задать:
diff --git a/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl b/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl
index c6066bb11..79d0fe431 100644
--- a/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl
+++ b/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl
@@ -263,7 +263,7 @@
Элементы.ФайлыЗаполнитьКопированием.Видимость = Ложь;
Если ЗначениеЗаполнено(ВнешнийОбъект) Тогда
- Если ФайловыеФункции.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда
+ Если ФайловыеФункцииСлужебный.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда
Элементы.ФайлыЗаполнитьКопированием.Видимость = Истина;
Элементы.ФайлыЗаполнитьКопированием.Доступность = (Файлы.Количество() = 0);
КонецЕсли;
@@ -1193,7 +1193,7 @@
Возврат;
КонецЕсли;
- СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла);
+ СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла);
Если СтрокиПути.Количество() >= 2 Тогда
Расширение = СтрокиПути[СтрокиПути.Количество()-1];
ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2];
diff --git a/SSL/src/CommonForms/ДокументооборотКарточкаЗадачи/Help/ru.html b/SSL/src/CommonForms/ДокументооборотКарточкаЗадачи/Help/ru.html
index a52a5ca50..4b7a44cb2 100644
--- a/SSL/src/CommonForms/ДокументооборотКарточкаЗадачи/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотКарточкаЗадачи/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Форма "Задача" предназначена для отображения информации о задаче в режиме "только чтение".
Для открытия карточки предмета бизнес-процесса, в рамках которого была создана данная задача, необходимо нажать на ссылку, расположенную в поле "Предмет".
Для открытия карточки бизнес-процесса необходимо выполнить команду "Открыть бизнес-процесс", расположенную в панели инструментов формы.
Для открытия карточки файла используйте клавишу F2 или кнопку ("Изменить текущий элемент") командной панели списка файлов.
Карточка файла содержит различные сведения о файле и кнопки для выполнения основных действий с файлом. Дополнительные команды для работы с файлом находятся в подменю "Все действия" командной панели формы файла.
diff --git a/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html b/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html
index 275c7e771..7bf1d6b83 100644
--- a/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html
@@ -1 +1 @@
-В этом диалоге настраивается рабочий каталог для хранения временных файлов при выполнении команды файла Просмотреть (при работе через веб браузер).
\ No newline at end of file
+В этом диалоге настраивается рабочий каталог для хранения временных файлов при выполнении команды файла Просмотреть (при работе через веб браузер).
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Module.bsl b/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Module.bsl
index e3979bc4d..1840a8901 100644
--- a/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Module.bsl
+++ b/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Module.bsl
@@ -20,7 +20,7 @@
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь к каталогу для временных файлов'");
Если ДиалогОткрытияФайла.Выбрать() Тогда
- КаталогДляСохраненияДанных = ДиалогОткрытияФайла.Каталог + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента());
+ КаталогДляСохраненияДанных = ДиалогОткрытияФайла.Каталог + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента());
КонецЕсли;
Иначе
Предупреждение(НСтр("ru = 'Для выбора каталога необходимо установить расширение для работы с файлами в Веб-клиенте.'"));
diff --git a/SSL/src/CommonForms/ДокументооборотСозданиеНовогоФайла/Help/ru.html b/SSL/src/CommonForms/ДокументооборотСозданиеНовогоФайла/Help/ru.html
index 06343e4f7..72f4c0189 100644
--- a/SSL/src/CommonForms/ДокументооборотСозданиеНовогоФайла/Help/ru.html
+++ b/SSL/src/CommonForms/ДокументооборотСозданиеНовогоФайла/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Для работы с реквизитами файла (автор, название, описание и т.д.) используется карточка ("Открыть карточку"), а для работы с самим файлом - соответствующее приложение, установленное на компьютере.
Основной рабочий каталог - каталог на Вашем персональном компьютере, в котором временно хранятся файлы, полученные из информационной базы для просмотра или редактирования.
В форме выполняется настройка параметров для использования средств криптографии: электронной цифровой подписи (ЭЦП) и шифрования. Для работы с криптографией вам потребуется установить стороннюю программу - криптопровайдер.
Для настройки нового обмена данными с другим узлом или с другой программой выберите соответствующую команду из подменю Создать. Откроется помощник настройки нового обмена данными.
Для выполнения обмена данными вручную выберите одну из настроек в списке и выполните команду Выполнить сейчас. При этом сначала будут загружены новые данные из другой программы, а затем выполнена выгрузка в обратную сторону. Кроме того, с помощью команды Настройка - Выполнить с настройкой можно выполнить обмен данными, предварительно настроив сопоставление одинаковых данных. Такая процедура полезна в тех случаях, когда в обоих узлах (программах) по каким-то причинам были независимо друг от друга введены одни и те же данные. Для снижения вероятности таких ситуаций можно настроить частый обмен данными по расписанию.
С помощью команды Настройка - Автоматически по расписанию можно настроить обмен данными по заданному расписанию. В этом случае, в клиент-серверном режиме работы обмен данными будет выполняться в фоне, с помощью регламентного задания Выполнение обмена данными, а в файловом режиме дополнительно потребуется запустить отдельный сеанс для выполнения регламентных заданий.
diff --git a/SSL/src/CommonForms/ОбменыДанными/Module.bsl b/SSL/src/CommonForms/ОбменыДанными/Module.bsl
index f937899e7..973414c08 100644
--- a/SSL/src/CommonForms/ОбменыДанными/Module.bsl
+++ b/SSL/src/CommonForms/ОбменыДанными/Module.bsl
@@ -22,6 +22,18 @@
Элементы.НастроитьРасписаниеВыполненияОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными;
Элементы.НастроитьРасписаниеВыполненияОбмена1.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными;
+ ЕстьПравоОбновления = ПравоДоступа("ОбновлениеКонфигурацииБазыДанных", Метаданные);
+ Элементы.ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления.Видимость = ЕстьПравоОбновления;
+ Элементы.ИнформацияОбменДаннымиПриостановленНетПраваОбновления.Видимость = Не ЕстьПравоОбновления;
+
+ НадписьОбменДаннымиПриостановлен = ?(ЕстьПравоОбновления,
+ Элементы.НадписьОбменДаннымиПриостановленЕстьПравоОбновления,
+ Элементы.НадписьОбменДаннымиПриостановленНетПраваОбновления);
+
+ НадписьОбменДаннымиПриостановлен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьОбменДаннымиПриостановлен.Заголовок, ПланыОбмена.ГлавныйУзел());
+
+ ПроверитьСостояниеОбменаСГлавнымУзлом();
+
КонецПроцедуры
&НаКлиенте
@@ -140,6 +152,11 @@
КонецПроцедуры
+&НаКлиенте
+Процедура УстановитьОбновление(Команда)
+ ОбменДаннымиКлиент.ВыполнитьОбновлениеИнформационнойБазы();
+КонецПроцедуры
+
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
@@ -162,6 +179,8 @@
// обновляем данные в списке состояния узлов
СписокСостоянияУзлов.Загрузить(ОбменДаннымиСервер.ТаблицаМонитораОбменаДанными(ОбменДаннымиПовтИсп.ПланыОбменаБСП()));
+ ПроверитьСостояниеОбменаСГлавнымУзлом();
+
КонецПроцедуры
&НаСервере
@@ -255,3 +274,9 @@
КонецПроцедуры
+&НаСервере
+Процедура ПроверитьСостояниеОбменаСГлавнымУзлом()
+
+ Элементы.ИнформационнаяПанельТребуетсяОбновление.Видимость = ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления();
+
+КонецПроцедуры
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html
index a4eb7c322..0dc4da38f 100644
--- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html
+++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html
@@ -1,2 +1,2 @@
-
+
Описание обновлений включает в себя список изменений в последней версии системы, а также историю изменений в предыдущих версиях.
При помощи галочек можно управлять видимостью варианта отчета в группе.
+
При помощи контекстного меню (кликнув правой кнопкой мыши) вариант отчета можно переместить в быстрый доступ или открыть для изменения наименования, описания, или настроек размещения.
Сохраняет изменения и переводит панель отчетов в режим просмотра.
+
Отменить
+
Переводит панель отчетов в режим просмотра без сохранения изменений.
+
Настроить (F2)
+
Выводит запрос на сохранение изменений и переводит панель отчетов в режим просмотра.
+
Сбросить настройки
+
Позволяет сбросить все настройки текущего пользователя в панели отчетов данного раздела.
\ No newline at end of file
diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl
index fc1430c29..b9b1974de 100644
--- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl
+++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl
@@ -3,638 +3,1045 @@
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
-
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
- Подсистемы = Параметры.Подсистемы;
- ИмяФормыОтчетов = Параметры.ИмяФормы;
- КартинкаФормы = Параметры.КартинкаФормы;
- ГруппироватьВарианты = истина;
-
- Заголовок = Параметры.ИмяФормы;
- Если Параметры.КартинкаФормы <> "" тогда
- Элементы.КартинкаОтчета.Картинка = БиблиотекаКартинок[Параметры.КартинкаФормы];
- Элементы.КартинкаОтчета.Видимость = истина;
- КонецЕсли;
+ КартинкаБыстрыйДоступ = БиблиотекаКартинок.БыстрыйДоступ;
- Если ТипЗнч(Параметры.Подсистемы) = Тип("СписокЗначений") тогда
- ПутиПодсистемы = Параметры.Подсистемы;
+ РазделИмя = Параметры.ИмяРаздела;
+ РазделМетаданные = Метаданные.Подсистемы.Найти(РазделИмя);
+ РазделСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные);
+
+ Если Параметры.Свойство("Заголовок") Тогда
+ Заголовок = Параметры.Заголовок;
Иначе
- ПутиПодсистемы = Новый СписокЗначений;
- ПутиПодсистемы.Добавить(Параметры.Подсистемы);
+ Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Отчеты раздела ""%1""'"),
+ РазделМетаданные.Представление()
+ );
КонецЕсли;
- ОбновитьПанельОтчетов(Отказ);
+ ЭтаФорма.КлючНазначенияИспользования = "Раздел_" + Строка(РазделСсылка.УникальныйИдентификатор());
-КонецПроцедуры
+ ВсеПодсистемы = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя();
+ Найденные = ВсеПодсистемы.Строки.НайтиСтроки(Новый Структура("РазделСсылка", РазделСсылка), Истина);
+ Для Каждого СтрокаДерева Из Найденные Цикл
+ СтрокаТаблицы = Подсистемы.Добавить();
+ ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаДерева);
+ СтрокаТаблицы.ИмяЭлемента = СтрЗаменить(СтрокаТаблицы.ПолноеИмя, ".", "_");
+ СтрокаТаблицы.НомерЭлемента = 0;
+ КонецЦикла;
+
+ ЦветСкрытыхВариантов = ЦветаСтиля.СкрытыйВариантОтчета;
+ ЦветВидимыхВариантов = ЦветаСтиля.ВидимыйВариантОтчета;
+ ЦветГруппыВариантовОтчетов = ЦветаСтиля.ГруппаВариантовОтчетов;
+ ШрифтЖирный = Новый Шрифт(, , Истина);
+
+ НаборРеквизитов = ПолучитьРеквизиты();
+ Для Каждого Реквизит Из НаборРеквизитов Цикл
+ ПостоянныеРеквизиты.Добавить(Реквизит.Имя);
+ КонецЦикла;
+
+ Для Каждого Команда Из Команды Цикл
+ ПостоянныеКоманды.Добавить(Команда.Имя);
+ КонецЦикла;
+
+ ПерерисоватьПанельОтчетов(Ложь, Ложь);
+КонецПроцедуры
&НаКлиенте
-Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
-
- Если ВыбранноеЗначение <> Неопределено тогда
- УстановитьВидимостьВариантовОтчета(ВыбранноеЗначение);
- КонецЕсли;
-
+Процедура ПриОткрытии(Отказ)
+ #Если ВебКлиент Тогда
+ ВебКлиент = Истина;
+ #Иначе
+ ВебКлиент = Ложь;
+ #КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
-
- Если ИмяСобытия = "Запись_ХранилищеВариантовОтчетов" тогда
- ОбновитьПанельОтчетов();
+ Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда
+ СохранитьНастройки = Ложь;
+ ОставитьИзмененияВНастройках = РежимНастройки;
+ ПерерисоватьПанельОтчетов(СохранитьНастройки, ОставитьИзмененияВНастройках);
КонецЕсли;
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
+ ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки);
+ ОтборНаименованиеСписокВыбора = Настройки.Получить("ОтборНаименованиеСписокВыбора");
+ Если ТипЗнч(ОтборНаименованиеСписокВыбора) = Тип("Массив") Тогда
+ Элементы.ОтборНаименование.СписокВыбора.ЗагрузитьЗначения(ОтборНаименованиеСписокВыбора);
+ КонецЕсли;
+КонецПроцедуры
+
+&НаСервере
+Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
+ Настройки.Вставить("ОтборНаименованиеСписокВыбора", Элементы.ОтборНаименование.СписокВыбора.ВыгрузитьЗначения());
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
+ Если ВариантыОтчетовКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность, Отказ) Тогда
+ СохранитьПользовательскиеНастройки();
+ КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПриЗакрытии()
+ Если ВариантыОтчетовКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность) Тогда
+ СохранитьПользовательскиеНастройки();
+ КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ
&НаКлиенте
-Процедура ОткрытьОтчет(Инициатор)
+Процедура ВариантНажатие(Элемент)
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя));
+ Если Найденные.Количество() <> 1 Тогда
+ Возврат;
+ КонецЕсли;
+ Вариант = Найденные[0];
- Ключ = Инициатор.Имя;
- Ключ = Лев(Ключ, Найти(Ключ, "_ГруппаРаздела_")-1);
- Ключ = ВариантыОтчетовКлиент.ВосстановитьЗапрещенныеСимволы(Ключ);
+ // Открытие
+ Если Вариант.Дополнительный Тогда
+
+ ПараметрыОткрытия = Новый Структура;
+ ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта);
+ ПараметрыОткрытия.Вставить("Вариант", Вариант.Ссылка);
+ ПараметрыОткрытия.Вставить("Отчет", Вариант.Отчет);
+ СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия);
+
+ ИначеЕсли Не ЗначениеЗаполнено(Вариант.ИмяОтчета) Тогда
+
+ Предупреждение(
+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
+ НСтр("ru = 'Невозможно открыть
+ |вариант отчета ""%1"",
+ |так как не заполнено имя отчета.'"),
+ Вариант.Наименование
+ )
+ );
+
+ Иначе
+
+ ПараметрыОткрытия = Новый Структура;
+ ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта);
+ ПараметрыОткрытия.Вставить("Раздел", РазделСсылка);
+ Уникальность = "Отчет." + Вариант.ИмяОтчета + "/КлючВарианта." + Вариант.КлючВарианта;
+ ОткрытьФорму("Отчет." + Вариант.ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность);
+
+ КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВидимостьВариантаПриИзменении(Элемент)
+ Флажок = Элемент;
+ Показать = ЭтаФорма[Флажок.Имя];
- ПозицияВарианта = Найти(Ключ, "\");
- ИмяОтчета = Лев(Ключ, ПозицияВарианта-1);
- КлючВарианта = Прав(Ключ, СтрДлина(Ключ)-ПозицияВарианта);
+ НадписьИмя = Сред(Флажок.Имя, СтрДлина("Флажок_")+1);
+ Элемент = Элементы.Найти(НадписьИмя);
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", НадписьИмя));
+ Если Найденные.Количество() <> 1 ИЛИ Элемент = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+ Вариант = Найденные[0];
- ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта);
-
- СтандартнаяОбработка = истина;
-
- ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка);
-
- Если СтандартнаяОбработка тогда
- Если ИмяОтчета = "Отчет.ДополнительнаяКоманда" тогда
- ПараметрКоманды = ВариантыОтчетовКлиент.ПолучитьПараметрыКоманды(ЗначениеПараметровКоманд, МассивПараметровКомманд, КлючВарианта);
- Если ПараметрКоманды <> Неопределено тогда
- ВариантыОтчетовКлиентПереопределяемый.ВыполнитьВнешнююКоманду(КлючВарианта, ПараметрКоманды);
+ ПоказатьСкрытьВариант(Вариант, Элемент, Показать);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОтборНаименованиеПриИзменении(Элемент)
+ Если ЗначениеЗаполнено(ОтборНаименование) Тогда
+ СписокВыбора = Элементы.ОтборНаименование.СписокВыбора;
+ ЭлементСписка = СписокВыбора.НайтиПоЗначению(ОтборНаименование);
+ Если ЭлементСписка = Неопределено Тогда
+ СписокВыбора.Вставить(0, ОтборНаименование);
+ Если СписокВыбора.Количество() > 10 Тогда
+ СписокВыбора.Удалить(10);
КонецЕсли;
Иначе
- ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, , Ключ);
+ Индекс = СписокВыбора.Индекс(ЭлементСписка);
+ Если Индекс <> 0 Тогда
+ СписокВыбора.Сдвинуть(Индекс, -Индекс);
+ КонецЕсли;
КонецЕсли;
+ ТекущийЭлемент = Элементы.ОтборНаименование;
КонецЕсли;
+ ПерерисоватьПанельОтчетов(Ложь, Истина);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОтборАвторПриИзменении(Элемент)
+ ПерерисоватьПанельОтчетов(Ложь, Истина);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ КОМАНД ФОРМЫ
&НаКлиенте
-Процедура ОбщийСписокВариантовОтчетов(Команда)
+Процедура Настроить(Команда)
+ РежимНастройки = НЕ РежимНастройки;
+ СохранитьНастройки = Ложь;
+ Если НЕ РежимНастройки И Модифицированность Тогда
+ ТекстВопроса = НСтр("ru = 'Настройки расположения отчетов были изменены.
+ |Сохранить изменения?'");
+
+ Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да);
+ Если Ответ = КодВозвратаДиалога.Да Тогда
+ СохранитьНастройки = Истина;
+ КонецЕсли;
+ КонецЕсли;
- ПараметрыФормы = Новый Структура("Подсистемы, ИмяФормы, КартинкаФормы");
+ ПерерисоватьПанельОтчетов(СохранитьНастройки, Ложь);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СохранитьИзменения(Команда)
+ РежимНастройки = Ложь;
+ ПерерисоватьПанельОтчетов(Истина, Ложь);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ОтменитьИзменения(Команда)
+ РежимНастройки = Ложь;
+ ПерерисоватьПанельОтчетов(Ложь, Ложь);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ПереместитьВБыстрыйДоступ(Команда)
+ Если ВебКлиент Тогда
+ Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1));
+ Иначе
+ Элемент = ТекущийЭлемент;
+ КонецЕсли;
+ Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда
+ Возврат;
+ КонецЕсли;
- ПараметрыФормы.Подсистемы = Подсистемы;
- ПараметрыФормы.ИмяФормы = НСтр("ru = 'Все'") +" "+ Нрег(ИмяФормыОтчетов);
- ПараметрыФормы.КартинкаФормы = КартинкаФормы;
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя));
+ Если Найденные.Количество() <> 1 Тогда
+ Возврат;
+ КонецЕсли;
+ Вариант = Найденные[0];
- СтруктураПараметров = ОткрытьФорму("ОбщаяФорма.ВсеОтчеты", ПараметрыФормы, ЭтаФорма);
+ ДобавитьУбратьВариантИзБыстрогоДоступа(Вариант, Элемент, Истина);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура УбратьИзБыстрогоДоступа(Команда)
+ Если ВебКлиент Тогда
+ Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1));
+ Иначе
+ Элемент = ТекущийЭлемент;
+ КонецЕсли;
+ Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда
+ Возврат;
+ КонецЕсли;
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя));
+ Если Найденные.Количество() <> 1 Тогда
+ Возврат;
+ КонецЕсли;
+ Вариант = Найденные[0];
+
+ ДобавитьУбратьВариантИзБыстрогоДоступа(Вариант, Элемент, Ложь);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура Изменить(Команда)
+ Если ВебКлиент Тогда
+ Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1));
+ Иначе
+ Элемент = ТекущийЭлемент;
+ КонецЕсли;
+ Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда
+ Возврат;
+ КонецЕсли;
+
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя));
+ Если Найденные.Количество() <> 1 Тогда
+ Возврат;
+ КонецЕсли;
+ Вариант = Найденные[0];
+
+ ОткрытьЗначение(Вариант.Ссылка);
+КонецПроцедуры
+
+&НаКлиенте
+Процедура СброситьНастройки(Команда)
+ ТекстВопроса = НСтр("ru = 'Сбросить настройки расположения отчетов?'");
+
+ Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Нет);
+
+ Если Ответ = КодВозвратаДиалога.Да Тогда
+ СброситьНастройкиИПерерисоватьФорму();
+ КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ВсеОтчеты(Команда)
+ ФормаПараметры = Новый Структура("РазделСсылка", РазделСсылка);
+ ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаСписка", ФормаПараметры);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-&НаСервере
-Процедура ОбновитьПанельОтчетов(Отказ = ложь)
-
- МассивЭлементов = Новый Массив;
-
- Для каждого ЭлементГруппыСсылка из Элементы.ГруппаОсновная.ПодчиненныеЭлементы Цикл
- Если ЭлементГруппыСсылка.Имя = "КартинкаОтчета" тогда
- Продолжить;
- КонецЕсли;
- МассивЭлементов.Добавить(ЭлементГруппыСсылка);
- КонецЦикла;
-
- Для каждого ЭлементГруппыСсылка из Элементы.ГруппаСмТакжеСпискиОтчетов.ПодчиненныеЭлементы Цикл
- МассивЭлементов.Добавить(ЭлементГруппыСсылка);
- КонецЦикла;
-
- Для каждого ЭлементГруппыСсылка из МассивЭлементов Цикл
- Элементы.Удалить(ЭлементГруппыСсылка);
- КонецЦикла;
-
- МассивКоманд = Новый Массив;
-
- Для каждого Команда из Команды Цикл
- Если Команда.Имя = "ОбщийСписокВариантовОтчетов" тогда
- Продолжить;
- КонецЕсли;
- МассивКоманд.Добавить(Команда);
- КонецЦикла;
-
- Для каждого Команда из МассивКоманд Цикл
- Команды.Удалить(Команда);
- КонецЦикла;
-
- СписокОтчетов = ВариантыОтчетовПереопределяемый.СписокОтчетовПоддерживаемыхПодсистемой();
- КоличествоОтчетов = СписокОтчетов.Количество();
- Для Номер = 1 По КоличествоОтчетов Цикл
- Индекс = КоличествоОтчетов - Номер;
- ОтчетИмя = СписокОтчетов[Индекс];
- ОтчетИмя = Сред(ОтчетИмя, Найти(ОтчетИмя, ".")+1);
- ОтчетМетаданные = Метаданные.Отчеты.Найти(ОтчетИмя);
- Если ОтчетМетаданные = Неопределено ИЛИ НЕ ПравоДоступа("Просмотр", ОтчетМетаданные) Тогда
- СписокОтчетов.Удалить(Индекс);
+////////////////////////////////////////////////////////////////////////////////
+// Клиент
+
+&НаКлиенте
+Процедура ПоказатьСкрытьВариант(Вариант, Элемент, Показать)
+ Модифицированность = Истина;
+ Вариант.Видимость = Показать;
+ Вариант.ИзмененПользователем = Истина;
+ Вариант.СвоиНастройки = Истина;
+ Элемент.ЦветТекста = ?(Показать, ЦветВидимыхВариантов, ЦветСкрытыхВариантов);
+ ЭтаФорма["Флажок_"+ Вариант.НадписьИмя] = Показать;
+ Если Вариант.Важный Тогда
+ Если Показать Тогда
+ Элемент.Шрифт = ШрифтЖирный;
Иначе
- ФункциональнаяОпцияПараметры = Новый Структура;
- ОтчетСодержится = Ложь;
- ОтчетДоступен = Ложь;
- Для Каждого ФункциональнаяОпцияМетаданные Из Метаданные.ФункциональныеОпции Цикл
- Если ФункциональнаяОпцияМетаданные.Состав.Содержит(ОтчетМетаданные) Тогда
- ОтчетСодержится = Истина;
- ФункциональнаяОпция = ПолучитьФункциональнуюОпцию(ФункциональнаяОпцияМетаданные.Имя, ФункциональнаяОпцияПараметры);
- Если ФункциональнаяОпция = Истина Тогда
- ОтчетДоступен = Истина;
- Прервать;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- Если ОтчетСодержится И НЕ ОтчетДоступен Тогда
- СписокОтчетов.Удалить(Индекс);
- КонецЕсли;
+ Элемент.Шрифт = Новый Шрифт;
КонецЕсли;
- КонецЦикла;
-
- ДеревоПодсистем = Новый ДеревоЗначений;
- ДеревоПодсистем.Колонки.Добавить("Подсистема");
- ДеревоПодсистем.Колонки.Добавить("Название");
-
- СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(ПутиПодсистемы, ДеревоПодсистем);
- Если СписокПодсистем.Количество() = 0 тогда
- ВызватьИсключение НСТр("ru = 'Некорректное значение параметра формы Подсистемы.'");
- Отказ = Истина;
+ КонецЕсли;
+КонецПроцедуры
+
+&НаКлиенте
+Процедура ДобавитьУбратьВариантИзБыстрогоДоступа(Вариант, Элемент, БыстрыйДоступ)
+ Модифицированность = Истина;
+ Если Вариант.БыстрыйДоступ = БыстрыйДоступ Тогда
Возврат;
КонецЕсли;
- МаксимальнаяДлинна = 0;
+ // Регистрация результата для записи
+ Вариант.БыстрыйДоступ = БыстрыйДоступ;
+ Вариант.ИзмененПользователем = Истина;
+ Вариант.СвоиНастройки = Истина;
- Для каждого ЭлементСпПодсистема из СписокПодсистем Цикл
- МаксимальнаяДлинна = Макс(СтрДлина(ЭлементСпПодсистема.Значение), МаксимальнаяДлинна);
- КонецЦикла;
+ // Связанное действие: если добавляемый в быстрый доступ вариант не видим - показываем его
+ Если БыстрыйДоступ И НЕ Вариант.Видимость Тогда
+ ПоказатьСкрытьВариант(Вариант, Элемент, Истина);
+ КонецЕсли;
-
- // Получить варианты отчетов с разделами
- ТЗ = "ВЫБРАТЬ
- | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ,
- | ВариантыОтчетов.Наименование КАК Представление,
- | ВариантыОтчетов.Описание,
- | ВариантыОтчетов.БыстрыйДоступ,
- | ВариантыОтчетов.Наименование КАК Сортировка,
- | ВариантыОтчетов.ТипВариантаОтчета,
- | ВариантыОтчетовПодсистемы.Подсистема
- |ИЗ
- | Справочник.ВариантыОтчетов.Подсистемы КАК ВариантыОтчетовПодсистемы
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов
- | ПО ВариантыОтчетовПодсистемы.Ссылка = ВариантыОтчетов.Ссылка
- |ГДЕ
- | (НЕ ВариантыОтчетов.ПометкаУдаления)
- | И ВЫРАЗИТЬ(ВариантыОтчетовПодсистемы.Подсистема КАК Строка("+Формат(МаксимальнаяДлинна, "ЧГ=0")+"))В (&Подсистемы)
- | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов)
- |
- |УПОРЯДОЧИТЬ ПО
- | Сортировка";
-
- Запрос = Новый Запрос(ТЗ);
- Запрос.УстановитьПараметр("Подсистемы", СписокПодсистем);
- Запрос.УстановитьПараметр("СписокОтчетов", СписокОтчетов);
- УстановитьПривилегированныйРежим(истина);
- ТаблицаВариантов = Запрос.Выполнить().Выгрузить();
- УстановитьПривилегированныйРежим(ложь);
+ // Визуальный результат
+ ПереместитьВариантБыстрогоДоступа(Вариант.ПолучитьИдентификатор(), БыстрыйДоступ);
+КонецПроцедуры
- // роли вариантов
- ТЗ = "ВЫБРАТЬ
- | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ,
- | ИсключенныеПользователи.Пользователь КАК Пользователь,
- | НЕ ИсключенныеПользователи.Ссылка.БыстрыйДоступ КАК БыстрыйДоступ
- |ИЗ
- | Справочник.ВариантыОтчетов КАК ВариантыОтчетов
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК ИсключенныеПользователи
- | ПО ВариантыОтчетов.Ссылка = ИсключенныеПользователи.Ссылка
- |ГДЕ
- | (НЕ ВариантыОтчетов.ПометкаУдаления)
- | И ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта В (&Ключи)
- | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов)
- | И (ИсключенныеПользователи.Пользователь = Пользователь)";
-
- Запрос.Текст = ТЗ;
- Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
- Запрос.УстановитьПараметр("Ключи", ТаблицаВариантов.ВыгрузитьКолонку("Ключ"));
- УстановитьПривилегированныйРежим(истина);
- ТаблицаПользователей = Запрос.Выполнить().Выгрузить();
- УстановитьПривилегированныйРежим(ложь);
-
- ТаблицаВариантов.Колонки.Добавить("Группировка", Новый ОписаниеТипов(,, Новый КвалификаторыСтроки()));
-
- СписокГруппировок = Новый ТаблицаЗначений;
- СписокГруппировок.Колонки.Добавить("Группировка");
- СписокГруппировок.Колонки.Добавить("ГруппировкаПредставление");
-
- Для каждого СтрокаПодсистемы из ДеревоПодсистем.Строки Цикл
- ДанныеГруппировки = СписокГруппировок.Добавить();
- ДанныеГруппировки.Группировка = СтрокаПодсистемы.Подсистема;
- ДанныеГруппировки.ГруппировкаПредставление = "";
- Для каждого СтрокаГруппировки из СтрокаПодсистемы.Строки Цикл
- ДанныеГруппировки = СписокГруппировок.Добавить();
- ДанныеГруппировки.Группировка = СтрокаГруппировки.Подсистема;
- ДанныеГруппировки.ГруппировкаПредставление = СтрокаГруппировки.Название;
- КонецЦикла;
- КонецЦикла;
-
- // Дерево вариантов
- ГруппировкиВариантов = Новый Соответствие;
- ГруппировкиВариантовСмТакже = Новый СписокЗначений;
-
- СгруппированныйСписокВариантовОтчетов = Новый ДеревоЗначений;
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Ключ");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Представление");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Описание");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Группировка");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("ГруппировкаПредставление");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Сортировка");
- СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("БыстрыйДоступ");
-
- Если ГруппироватьВарианты тогда
- Для каждого ГруппировкаВар из СписокГруппировок Цикл
- Если Найти(ГруппировкаВар.Группировка, "СмТакже") > 0 тогда
- Продолжить;
- КонецЕсли;
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = ГруппировкаВар.Группировка;
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = ГруппировкаВар.ГруппировкаПредставление;
- ГруппировкиВариантов.Вставить(ГруппировкаВар.Группировка, СтрокаГруппировкиОтчета);
- КонецЦикла;
- КонецЕсли;
-
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета";
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Прочие'");
- ГруппировкиВариантов.Вставить("ПрочиеИПользовательскиеВариантыОтчета", СтрокаГруппировкиОтчета);
- СтрокаФиксированнаяГруппировка = СтрокаГруппировкиОтчета;
-
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = "СмТакже";
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'См. также'");
- ГруппировкиВариантов.Вставить("СмТакже", СтрокаГруппировкиОтчета);
- СтрокаГруппировкаСмТакже = СтрокаГруппировкиОтчета;
-
- СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить();
- СтрокаГруппировкиОтчета.Группировка = "ДополнительныеОтчеты";
- СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Дополнительные отчеты'");
- ГруппировкиВариантов.Вставить("ДополнительныеОтчеты", СтрокаГруппировкиОтчета);
- СтрокаГруппировкаДополнительныеОтчеты = СтрокаГруппировкиОтчета;
-
- ТаблицаДополнительныхКоманд = Новый ТаблицаЗначений;
- ТаблицаДополнительныхКоманд.Колонки.Добавить("УникальныйИдентификатор");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("Представление");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("Описание");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("БыстрыйДоступ");
- ТаблицаДополнительныхКоманд.Колонки.Добавить("ПараметрКоманды");
-
- ВариантыОтчетовПереопределяемый.СписокДополнительныхКоманд(ТаблицаДополнительныхКоманд, ПутиПодсистемы);
-
- ПараметрыКоманд = Новый Массив;
-
- Если ТаблицаДополнительныхКоманд.Количество() > 0 Тогда
- Индекс = 0;
- Для Каждого СтрокаДополнительногоОтчета из ТаблицаДополнительныхКоманд Цикл
-
- СтрокаТаблицаВариантов = ТаблицаВариантов.Добавить();
- СтрокаТаблицаВариантов.Ключ = "Отчет.ДополнительнаяКоманда\"+СтрокаДополнительногоОтчета.УникальныйИдентификатор;
- СтрокаТаблицаВариантов.Представление = СтрокаДополнительногоОтчета.Представление;
- СтрокаТаблицаВариантов.Описание = СтрокаДополнительногоОтчета.Описание;
- СтрокаТаблицаВариантов.БыстрыйДоступ = СтрокаДополнительногоОтчета.БыстрыйДоступ;
- СтрокаТаблицаВариантов.Сортировка = СтрокаДополнительногоОтчета.Представление;
- СтрокаТаблицаВариантов.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ДополнительнаяКоманда;
- СтрокаТаблицаВариантов.Подсистема = "ДополнительныеОтчеты";
-
- СтрокаЗначенияКоманды = ЗначениеПараметровКоманд.Добавить();
- СтрокаЗначенияКоманды.Ключ = СтрокаДополнительногоОтчета.УникальныйИдентификатор;
- СтрокаЗначенияКоманды.ИндексПозицииЭлемента = Индекс;
- ПараметрыКоманд.Добавить(Новый ФиксированнаяСтруктура(СтрокаДополнительногоОтчета.ПараметрКоманды));
- Индекс = Индекс + 1;
-
- КонецЦикла;
- КонецЕсли;
-
- МассивПараметровКомманд = Новый ФиксированныйМассив(ПараметрыКоманд);
-
- // Составим список отчетов
- СоответствиеВариантовНомеруСортировки = Новый Соответствие;
-
- Для каждого СтрокаВариантаОтчета из ТаблицаВариантов Цикл
-
- Если НЕ ГруппироватьВарианты или НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Подсистема ) тогда
- СтрокаВариантаОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета";
- Иначе
- Если Найти(СтрокаВариантаОтчета.Подсистема, "СмТакже") > 0 тогда
- СтрокаВариантаОтчета.Группировка = "СмТакже";
- ИначеЕсли СтрокаВариантаОтчета.Подсистема = СтрокаВариантаОтчета.Подсистема тогда
- Для каждого ГруппировкаВараинта из ГруппировкиВариантов Цикл
- Если СтрокаВариантаОтчета.Подсистема = ГруппировкаВараинта.Ключ тогда
- СтрокаВариантаОтчета.Группировка = ГруппировкаВараинта.Ключ;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- КонецЕсли;
-
- СоответствиеВариантовНомеруСортировки.Вставить(СтрокаВариантаОтчета.Ключ, СтрокаВариантаОтчета.Сортировка);
- КонецЦикла;
-
- Для каждого СтрокаВарианта из ТаблицаВариантов Цикл
-
- БыстрыйДоступ = СтрокаВарианта.БыстрыйДоступ;
- СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, Пользователи.ТекущийПользователь()));
- Для каждого СтрокаПользователи из СтрокиПользователи Цикл
- БыстрыйДоступ = СтрокаПользователи.БыстрыйДоступ;
- КонецЦикла;
-
- Если СтрокаВарианта.Группировка = Неопределено Тогда
- НаборСтрок = СтрокаФиксированнаяГруппировка.Строки;
- Иначе
- НаборСтрок = ГруппировкиВариантов[СтрокаВарианта.Группировка].Строки;
- КонецЕсли;
- Если НаборСтрок.НайтиСтроки(Новый Структура("Ключ", СтрокаВарианта.Ключ)).Количество() = 0 Тогда
- СтрокаВариантаОтчета = НаборСтрок.Добавить();
- ЗаполнитьЗначенияСвойств(СтрокаВариантаОтчета, СтрокаВарианта);
- Если СтрокаВарианта.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет Тогда
- СтрокаВариантаОтчета.Ключ = СтрокаВарианта.Ключ + "_Отчет_";
- КонецЕсли;
- СтрокаВариантаОтчета.БыстрыйДоступ = БыстрыйДоступ;
- СтрокаВариантаОтчета.Сортировка = СоответствиеВариантовНомеруСортировки[СтрокаВарианта.Ключ];
- Если НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Сортировка) Тогда
- СтрокаВариантаОтчета.Сортировка = "ЯЯ9999999999999";
- КонецЕсли;
- КонецЕсли;
-
- КонецЦикла;
-
- // Удалить лишние группировки
- УдаляемыеГруппировки = Новый Массив;
- Для каждого СтрокаГруппировки из СгруппированныйСписокВариантовОтчетов.Строки Цикл
- Если СтрокаГруппировки.Строки.Количество() = 0 тогда
- УдаляемыеГруппировки.Добавить(СтрокаГруппировки);
- КонецЕсли;
- КонецЦикла;
-
- Для каждого СтрокаГруппировки из УдаляемыеГруппировки Цикл
- СгруппированныйСписокВариантовОтчетов.Строки.Удалить(СтрокаГруппировки);
- КонецЦикла;
-
- // Вывести группировки отчета
- Если СгруппированныйСписокВариантовОтчетов.Строки.Количество() = 1 тогда
- СтрокаГруппировки = СгруппированныйСписокВариантовОтчетов.Строки[0];
- Элементы.ГруппаОсновная.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
- ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Элементы.ГруппаОсновная);
- Иначе
- Элементы.ГруппаОсновная.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
- Для каждого СтрокаГруппировки из СгруппированныйСписокВариантовОтчетов.Строки Цикл
-
- Если Найти(СтрокаГруппировки.Группировка, "СмТакже") > 0 тогда
- Продолжить;
- КонецЕсли;
-
- // Пропустить группу "См. также"
- УИ = "ГруппаРаздела_" + СтрокаГруппировки.Группировка;
- Группа = ДобавитьГруппу(УИ, Элементы.ГруппаОсновная, СтрокаГруппировки.ГруппировкаПредставление, истина);
- ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Группа);
- КонецЦикла;
- КонецЕсли;
-
- Если СгруппированныйСписокВариантовОтчетов.Строки.Найти("СмТакже", "Группировка") <> Неопределено тогда
- Элементы.ГруппаСмТакже.БыстрыйДоступ = Истина;
- СтрокаГруппировки = СтрокаГруппировкаСмТакже;
- Элементы.ГруппаСмТакжеСпискиОтчетов.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
- ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Элементы.ГруппаСмТакжеСпискиОтчетов);
- КонецЕсли;
-
-КонецПроцедуры
+////////////////////////////////////////////////////////////////////////////////
+// Вызов сервера
&НаСервере
-Процедура ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Группа)
+Процедура ПереместитьВариантБыстрогоДоступа(Знач ВариантИдентификатор, Знач БыстрыйДоступ)
+ Вариант = ДобавленныеВарианты.НайтиПоИдентификатору(ВариантИдентификатор);
+ Элемент = Элементы.Найти(Вариант.НадписьИмя);
- СтрокаГруппировки.Строки.Сортировать("Сортировка, Представление");
+ Если БыстрыйДоступ Тогда
+ Элемент.Шрифт = ШрифтЖирный;
+ ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.БыстрыйДоступ);
+ Если НЕ Элементы.БыстрыйДоступДекорация.Видимость Тогда
+ Элементы.БыстрыйДоступДекорация.Видимость = Истина;
+ КонецЕсли;
+ ИначеЕсли Вариант.СмТакже Тогда
+ Элемент.Шрифт = Новый Шрифт;
+ ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.СмТакже);
+ ИначеЕсли Вариант.БезГруппы Тогда
+ Элемент.Шрифт = ?(Вариант.Важный, ШрифтЖирный, Новый Шрифт);
+ ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.БезГруппы);
+ Иначе
+ Элемент.Шрифт = ?(Вариант.Важный, ШрифтЖирный, Новый Шрифт);
+ Найденные = Подсистемы.НайтиСтроки(Новый Структура("Ссылка", Вариант.Подсистема));
+ Подсистема = Найденные[0];
+ Если Подсистема.НомерЭлемента = 0 Тогда
+ Результат = ДобавитьГруппуУровня4(Элементы.СГруппойКолонка3, Подсистема);
+ ГруппаДляПереноса = Результат.ГруппаУровня4;
+ Иначе
+ ГруппаДляПереноса = Элементы.Найти(Подсистема.ИмяЭлемента + "_" + Формат(Подсистема.НомерЭлемента, "ЧГ=0"));
+ КонецЕсли;
+ КонецЕсли;
- ИмяГруппировки = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаГруппировки.Группировка);
+ Элементы.Переместить(Элемент.Родитель, ГруппаДляПереноса);
- ИмяГруппировки = "_ГруппаРаздела_" + ИмяГруппировки;
+ КартинкаИмя = "Картинка_" + Вариант.НадписьИмя;
+ Картинка = Элементы.Найти(КартинкаИмя);
+ КартинкаВыведена = (Картинка <> Неопределено);
+ Если КартинкаВыведена <> БыстрыйДоступ Тогда
+ Если КартинкаВыведена Тогда
+ Элементы.Удалить(Картинка);
+ Иначе
+ Картинка = Элементы.Вставить(КартинкаИмя, Тип("ДекорацияФормы"), Элемент.Родитель, Элемент);
+ Картинка.Вид = ВидДекорацииФормы.Картинка;
+ Картинка.Ширина = 2;
+ Картинка.Высота = 1;
+ Картинка.Картинка = КартинкаБыстрыйДоступ;
+ Картинка.РастягиватьПоГоризонтали = Ложь;
+ Картинка.РастягиватьПоВертикали = Ложь;
+ КонецЕсли;
+ КонецЕсли;
- Колонка1 = ДобавитьГруппу(ИмяГруппировки + "Колонки1", Группа, "Первая колонка", , ложь);
- Колонка2 = ДобавитьГруппу(ИмяГруппировки + "Колонки2", Группа, "Вторая колонка", , ложь);
- Колонка3 = ДобавитьГруппу(ИмяГруппировки + "Колонки3", Группа, "Третья колонка", , ложь);
+ ФлажокИмя = "Флажок_" + Вариант.НадписьИмя;
+ Флажок = Элементы.Найти(ФлажокИмя);
+ ФлажокВыведен = (Флажок <> Неопределено);
+ Если ФлажокВыведен = БыстрыйДоступ Тогда
+ Если ФлажокВыведен Тогда
+ Элементы.Удалить(Флажок);
+
+ УдаляемыеРеквизиты = Новый Массив;
+ УдаляемыеРеквизиты.Добавить(ФлажокИмя);
+ ИзменитьРеквизиты(, УдаляемыеРеквизиты);
+ Иначе
+ РеквизитФормы = Новый РеквизитФормы(ФлажокИмя, Новый ОписаниеТипов("Булево"), , , Истина);
+
+ ДобавляемыеРеквизиты = Новый Массив;
+ ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
+ ИзменитьРеквизиты(ДобавляемыеРеквизиты);
+
+ Флажок = Элементы.Вставить(ФлажокИмя, Тип("ПолеФормы"), Элемент.Родитель, Элемент);
+ Флажок.Вид = ВидПоляФормы.ПолеФлажка;
+ Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
+ Флажок.УстановитьДействие("ПриИзменении", "ВидимостьВариантаПриИзменении");
+ Флажок.ПутьКДанным = ФлажокИмя;
+
+ ЭтаФорма[ФлажокИмя] = Вариант.Видимость;
+ КонецЕсли;
+ КонецЕсли;
- КоличетвоВариантов = СтрокаГруппировки.Строки.Количество();
-
- МинимальноКолВоВариантов = Цел(КоличетвоВариантов/3);
- Остаток = КоличетвоВариантов - МинимальноКолВоВариантов*3;
-
- КоличествоВариантовВКолонке1 = МинимальноКолВоВариантов + ?(Остаток >= 1, 1, 0);
- КоличествоВариантовВКолонке2 = МинимальноКолВоВариантов + ?(Остаток >= 2, 1, 0);
- КоличествоВариантовВКолонке3 = МинимальноКолВоВариантов;
-
- Для Сч = 0 по КоличествоВариантовВКолонке1-1 Цикл
- СтрокаСсылки = СтрокаГруппировки.Строки[Сч];
- ДобавитьСсылкуНаВариантОтчета(
- СтрокаСсылки.Ключ + ИмяГруппировки,
- СтрокаСсылки.Представление,
- СтрокаСсылки.Описание,
- Колонка1,
- СтрокаСсылки.БыстрыйДоступ
- );
- КонецЦикла;
-
- Для Сч = КоличествоВариантовВКолонке1 по КоличествоВариантовВКолонке1 + КоличествоВариантовВКолонке2-1 Цикл
- СтрокаСсылки = СтрокаГруппировки.Строки[Сч];
- ДобавитьСсылкуНаВариантОтчета(
- СтрокаСсылки.Ключ + ИмяГруппировки,
- СтрокаСсылки.Представление,
- СтрокаСсылки.Описание,
- Колонка2,
- СтрокаСсылки.БыстрыйДоступ
- );
- КонецЦикла;
-
- Для Сч = КоличествоВариантовВКолонке1 + КоличествоВариантовВКолонке2 по КоличествоВариантовВКолонке1 + КоличествоВариантовВКолонке2 + КоличествоВариантовВКолонке3-1 Цикл
- СтрокаСсылки = СтрокаГруппировки.Строки[Сч];
- ДобавитьСсылкуНаВариантОтчета(
- СтрокаСсылки.Ключ + ИмяГруппировки,
- СтрокаСсылки.Представление,
- СтрокаСсылки.Описание,
- Колонка3,
- СтрокаСсылки.БыстрыйДоступ
- );
- КонецЦикла;
+ НадписьКонтекстноеМеню = Элемент.КонтекстноеМеню;
+ Если НадписьКонтекстноеМеню <> Неопределено Тогда
+ КнопкаУбрать = Элементы.Найти("УбратьИзБыстрогоДоступа_" + Вариант.НадписьИмя);
+ КнопкаПереместить = Элементы.Найти("ПереместитьВБыстрыйДоступ_" + Вариант.НадписьИмя);
+ КнопкаУбрать.Видимость = БыстрыйДоступ;
+ КнопкаПереместить.Видимость = НЕ БыстрыйДоступ;
+ КонецЕсли;
КонецПроцедуры
&НаСервере
-Функция ДобавитьГруппу(Имя, Родитель, Заголовок = "", Горизонтально = ложь, ОтображатьЗаголовок = истина)
+Процедура СброситьНастройкиИПерерисоватьФорму()
+ РежимНастройки = Ложь;
+ Модифицированность = Ложь;
+ РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(РазделСсылка);
+ ПерерисоватьПанельОтчетов(Ложь, Ложь);
+КонецПроцедуры
+
+////////////////////////////////////////////////////////////////////////////////
+// Сервер
+
+&НаСервере
+Функция ДобавитьГруппуУровня4(ВГруппу, Знач ПодсистемаСсылкаИлиСтрока)
+ Результат = Новый Структура;
- Имя = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(Имя);
-
- Группа = Элементы.Добавить(Имя, Тип("ГруппаФормы"), Родитель);
- Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
- Группа.Заголовок = Заголовок;
- Группа.ОтображатьЗаголовок = ОтображатьЗаголовок;
- Если Группа.ОтображатьЗаголовок тогда
- Группа.ШрифтЗаголовка = Новый Шрифт(Группа.ШрифтЗаголовка, , , истина);
+ // Поиск строки подсистемы по ссылке
+ Если ТипЗнч(ПодсистемаСсылкаИлиСтрока) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда
+ Найденные = Подсистемы.НайтиСтроки(Новый Структура("Ссылка", ПодсистемаСсылкаИлиСтрока));
+ ПодсистемаСтрока = Найденные[0];
+ Иначе
+ ПодсистемаСтрока = ПодсистемаСсылкаИлиСтрока;
КонецЕсли;
- Группа.Отображение = ОтображениеОбычнойГруппы.Отступ;
- Группа.Группировка = ?(Горизонтально, ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная,
- ГруппировкаПодчиненныхЭлементовФормы.Вертикальная);
- Группа.РастягиватьПоГоризонтали = Истина;
- Группа.ШиринаПодчиненныхЭлементов = ШиринаПодчиненныхЭлементовФормы.Одинаковая;
- Возврат Группа;
+ ПодсистемаСтрока.НомерЭлемента = ПодсистемаСтрока.НомерЭлемента + 1;
+ ГруппаУровня4Имя = ПодсистемаСтрока.ИмяЭлемента + "_" + Формат(ПодсистемаСтрока.НомерЭлемента, "ЧГ=0");
+
+ // Пустая декорация
+ Если ВГруппу.ПодчиненныеЭлементы.Количество() > 0 Тогда
+ ДекорацияИмя = "Декорация_" + ГруппаУровня4Имя;
+ Декорация = Элементы.Вставить(ДекорацияИмя, Тип("ДекорацияФормы"), ВГруппу);
+ Декорация.Заголовок = " ";
+ Результат.Вставить("Декорация", Декорация);
+ КонецЕсли;
+
+ // Группа
+ ГруппаУровня4 = Элементы.Вставить(ГруппаУровня4Имя, Тип("ГруппаФормы"), ВГруппу);
+ ГруппаУровня4.Вид = ВидГруппыФормы.ОбычнаяГруппа;
+ ГруппаУровня4.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов;
+ ГруппаУровня4.РастягиватьПоГоризонтали = Истина;
+ ГруппаУровня4.Отображение = ОтображениеОбычнойГруппы.Нет;
+ ГруппаУровня4.ШрифтЗаголовка = ШрифтЖирный;
+ ГруппаУровня4.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
+ ГруппаУровня4.Заголовок = ПодсистемаСтрока.Представление;
+ Результат.Вставить("ГруппаУровня4", ГруппаУровня4);
+
+ Возврат Результат;
КонецФункции
&НаСервере
-Процедура ДобавитьСсылкуНаВариантОтчета(Ключ, Представление, Описание, Родитель, БыстрыйДоступ)
+Процедура ЗаполнитьПанельОтчетов()
- ИмяОтчета = Ключ;
-
- Ключ = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(Ключ);
-
- Если Представление <> "" И Найти(Ключ, "Отчет_Точка_ДополнительнаяКоманда") = 0 тогда
- ПозицияВарианта = Найти(ИмяОтчета, "\");
- ИмяОтчета = Лев(ИмяОтчета, ПозицияВарианта-1);
- ИмяОтчета = СтрЗаменить(ИмяОтчета, "Отчет.", "");
-
- Отчет = Метаданные.Отчеты.Найти(ИмяОтчета);
- Если Отчет = Неопределено тогда
- Возврат;
- КонецЕсли;
-
- ЕстьПравоПросмотра = ПравоДоступа("Просмотр", Отчет);
- Если НЕ ЕстьПравоПросмотра тогда
- Возврат;
- КонецЕсли;
-
- ПараметрыФО = Новый Структура("");
-
- ДоступенПоФоОпциям = ложь;
- СодержитсяВФО = ложь;
- Для каждого Опция из Метаданные.ФункциональныеОпции Цикл
-
- Если Опция.Состав.Найти(Отчет.Имя) = Неопределено тогда
- Продолжить;
- КонецЕсли;
-
- СодержитсяВФО = Истина;
-
- ЗначениеФО = ПолучитьФункциональнуюОпцию(Опция.Имя, ПараметрыФО);
- Если ТипЗнч(ЗначениеФО) = Тип("Булево") тогда
- Если ЗначениеФО тогда
- ДоступенПоФоОпциям = истина;
- Прервать;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
- Иначе
- СодержитсяВФО = ложь;
- ДоступенПоФоОпциям = истина;
- КонецЕсли;
-
- Если СодержитсяВФО И НЕ ДоступенПоФоОпциям тогда
- Возврат;
- КонецЕсли;
-
- НоваяНадпись = Элементы.Добавить(Ключ, Тип("ДекорацияФормы"), Родитель);
- НоваяНадпись.Вид = ВидДекорацииФормы.Надпись;
- НоваяНадпись.Гиперссылка = Истина;
- НоваяНадпись.Заголовок = СокрЛП(Представление);
- НоваяНадпись.Видимость = БыстрыйДоступ;
- НоваяНадпись.РастягиватьПоГоризонтали = Истина;
- НоваяНадпись.РастягиватьПоВертикали = Ложь;
- НоваяНадпись.Высота = 1;
- Если Представление <> "" Тогда
- НоваяНадпись.УстановитьДействие("Нажатие", "ОткрытьОтчет");
- КонецЕсли;
-
-Конецпроцедуры
-
-&НаСервере
-Процедура УстановитьВидимостьВариантовОтчета(СтруктураПараметров)
-
- СписокКлючей = СтруктураПараметров.СписокВариантов;
-
- ТЗ = "ВЫБРАТЬ
- | ВариантыОтчетов.Ссылка,
- | ВариантыОтчетов.БыстрыйДоступ,
- | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ
+ ТекстЗапроса =
+ "ВЫБРАТЬ
+ | Подсистемы.Ссылка,
+ | Подсистемы.Представление,
+ | Подсистемы.Приоритет
+ |ПОМЕСТИТЬ втПодсистемы
|ИЗ
- | Справочник.ВариантыОтчетов КАК ВариантыОтчетов
+ | &Подсистемы КАК Подсистемы
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ
+ | ДобавленныеВарианты.Ссылка,
+ | ДобавленныеВарианты.Подсистема,
+ | ДобавленныеВарианты.Видимость,
+ | ДобавленныеВарианты.БыстрыйДоступ
+ |ПОМЕСТИТЬ втДобавленныеВарианты
+ |ИЗ
+ | &ДобавленныеВарианты КАК ДобавленныеВарианты
|ГДЕ
- | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта В (&Ключ)";
-
- Запрос = Новый Запрос(ТЗ);
- Запрос.УстановитьПараметр("Ключ", СписокКлючей);
+ | ДобавленныеВарианты.ИзмененПользователем = ИСТИНА
+ |;
+ |
+ |////////////////////////////////////////////////////////////////////////////////
+ |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
+ | НастройкиРаздела.Ссылка КАК Ссылка,
+ | НастройкиРаздела.Ссылка.Отчет КАК Отчет,
+ | НастройкиРаздела.Ссылка.КлючВарианта КАК КлючВарианта,
+ | НастройкиРаздела.Ссылка.Наименование КАК Наименование,
+ | НастройкиРаздела.Ссылка.Автор КАК Автор,
+ | ВЫРАЗИТЬ(НастройкиРаздела.Ссылка.Описание КАК СТРОКА(1000)) КАК Описание,
+ | НастройкиРаздела.РазделИлиГруппа КАК Подсистема,
+ | втПодсистемы.Приоритет КАК ПодсистемаПриоритет,
+ | втПодсистемы.Представление КАК ПодсистемаПредставление,
+ | НастройкиРаздела.Важный КАК Важный,
+ | НастройкиРаздела.СмТакже КАК СмТакже,
+ | ВЫБОР
+ | КОГДА НастройкиРаздела.Ссылка.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный)
+ | ТОГДА ИСТИНА
+ | ИНАЧЕ ЛОЖЬ
+ | КОНЕЦ КАК Дополнительный,
+ | ВЫБОР
+ | КОГДА НастройкиРаздела.РазделИлиГруппа = &РазделСсылка
+ | И НастройкиРаздела.СмТакже = ЛОЖЬ
+ | ТОГДА ИСТИНА
+ | ИНАЧЕ ЛОЖЬ
+ | КОНЕЦ КАК БезГруппы,
+ | ЕСТЬNULL(втДобавленныеВарианты.Видимость, ЕСТЬNULL(НастройкиПользователя.Видимость, НастройкиРаздела.Ссылка.ВидимостьПоУмолчанию
+ | ИЛИ ВЫБОР
+ | КОГДА НастройкиРаздела.Ссылка.Автор = &ТекущийПользователь
+ | ТОГДА ИСТИНА
+ | ИНАЧЕ ЛОЖЬ
+ | КОНЕЦ)) КАК Видимость,
+ | ЕСТЬNULL(втДобавленныеВарианты.БыстрыйДоступ, ЕСТЬNULL(НастройкиПользователя.БыстрыйДоступ, ЛОЖЬ)) КАК БыстрыйДоступ,
+ | ВЫБОР
+ | КОГДА НастройкиПользователя.Видимость ЕСТЬ NULL
+ | И втДобавленныеВарианты.Видимость ЕСТЬ NULL
+ | ТОГДА ЛОЖЬ
+ | ИНАЧЕ ИСТИНА
+ | КОНЕЦ КАК СвоиНастройки,
+ | ВЫБОР
+ | КОГДА НастройкиРаздела.Ссылка.ТипОтчета = &ТипВнутренний
+ | ТОГДА НастройкиРаздела.Ссылка.Отчет.Имя
+ | КОГДА НастройкиРаздела.Ссылка.ТипОтчета = &ТипДополнительный
+ | ТОГДА """"
+ | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(НастройкиРаздела.Ссылка.Отчет КАК СТРОКА(150)), 14, 137)
+ | КОНЕЦ КАК ИмяОтчета,
+ | ВЫБОР
+ | КОГДА &ОтборНаименование = """"
+ | ТОГДА ЛОЖЬ
+ | КОГДА НастройкиРаздела.Ссылка.Наименование ПОДОБНО ""%"" + &ОтборНаименование + ""%""
+ | ТОГДА ЛОЖЬ
+ | ИНАЧЕ ИСТИНА
+ | КОНЕЦ
+ | ИЛИ ВЫБОР
+ | КОГДА &ОтборАвтор = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
+ | ТОГДА ЛОЖЬ
+ | КОГДА НастройкиРаздела.Ссылка.Автор = &ОтборАвтор
+ | ТОГДА ЛОЖЬ
+ | ИНАЧЕ ИСТИНА
+ | КОНЕЦ КАК СкрытОтбором
+ |ИЗ
+ | Справочник.ВариантыОтчетов.Размещение КАК НастройкиРаздела
+ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы
+ | ПО НастройкиРаздела.РазделИлиГруппа = втПодсистемы.Ссылка
+ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НастройкиПользователя
+ | ПО (НастройкиПользователя.Пользователь = &ТекущийПользователь)
+ | И НастройкиРаздела.Ссылка = НастройкиПользователя.Вариант
+ | И НастройкиРаздела.РазделИлиГруппа = НастройкиПользователя.РазделИлиГруппа
+ | ЛЕВОЕ СОЕДИНЕНИЕ втДобавленныеВарианты КАК втДобавленныеВарианты
+ | ПО НастройкиРаздела.Ссылка = втДобавленныеВарианты.Ссылка
+ | И НастройкиРаздела.РазделИлиГруппа = втДобавленныеВарианты.Подсистема
+ |ГДЕ
+ | НастройкиРаздела.Использование = ИСТИНА
+ | И НастройкиРаздела.Ссылка.Отчет В(&ОтчетыПользователя)
+ | И НастройкиРаздела.Ссылка.ПометкаУдаления = ЛОЖЬ
+ | И НЕ НастройкиРаздела.Ссылка.Отчет ЕСТЬ NULL
+ | И ЕСТЬNULL(НастройкиПользователя.Видимость, НастройкиРаздела.Ссылка.ВидимостьПоУмолчанию
+ | ИЛИ ВЫБОР
+ | КОГДА НастройкиРаздела.Ссылка.Автор = &ТекущийПользователь
+ | ТОГДА ИСТИНА
+ | ИНАЧЕ ЛОЖЬ
+ | КОНЕЦ) = ИСТИНА";
- УстановитьПривилегированныйРежим(Истина);
- Выборка = Запрос.Выполнить().Выбрать();
- ТекущийПользователь = Пользователи.ТекущийПользователь();
+ Запрос = Новый Запрос;
+ Запрос.УстановитьПараметр("Подсистемы", Подсистемы.Выгрузить());
+ Запрос.УстановитьПараметр("РазделСсылка", РазделСсылка);
+ Запрос.УстановитьПараметр("ДобавленныеВарианты", ДобавленныеВарианты.Выгрузить(, "Ссылка, Подсистема, Видимость, БыстрыйДоступ, ИзмененПользователем"));
+ Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь());
+ Запрос.УстановитьПараметр("ОтборНаименование", ?(РежимНастройки, ОтборНаименование, ""));
+ Запрос.УстановитьПараметр("ОтборАвтор", ?(РежимНастройки, ОтборАвтор, Справочники.Пользователи.ПустаяСсылка()));
+ Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний);
+ Запрос.УстановитьПараметр("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный);
+ Запрос.УстановитьПараметр("ОтчетыПользователя", ВариантыОтчетов.ОтчетыТекущегоПользователя());
- Пока Выборка.Следующий() Цикл
- ЗначениеЭлемент = СписокКлючей.НайтиПоЗначению(Выборка.Ключ);
- Если ЗначениеЭлемент <> Неопределено тогда
- Объект = Выборка.Ссылка.ПолучитьОбъект();
- СтрокиПользователя = Объект.ИсключенияБыстрогоДоступа.НайтиСтроки(Новый Структура("Пользователь", ТекущийПользователь));
- Если ЗначениеЭлемент.Пометка <> Выборка.БыстрыйДоступ тогда
- Если СтрокиПользователя.Количество() = 0 тогда
- СтрокаПользователя = Объект.ИсключенияБыстрогоДоступа.Добавить();
- СтрокаПользователя.Пользователь = ТекущийПользователь;
- Объект.Записать();
- КонецЕсли;
- Иначе
- Если СтрокиПользователя.Количество() > 0 тогда
- Объект.ИсключенияБыстрогоДоступа.Удалить(СтрокиПользователя[0]);
- Объект.Записать();
- КонецЕсли;
- КонецЕсли;
- КонецЕсли;
- КонецЦикла;
-
- СписокВнешниихКоманд = Новый Массив;
-
- Для каждого Ключ из СписокКлючей Цикл
- Если Найти(Ключ.Значение, "Отчет.ДополнительнаяКоманда") > 0 Тогда
- КлючВарианта = СтрЗаменить(Ключ.Значение, "Отчет.ДополнительнаяКоманда\", "");
- ПараметрКоманды = Неопределено;
- Для Каждого СтрокаПараметра из ЗначениеПараметровКоманд Цикл
- Если СтрокаПараметра.Ключ = КлючВарианта Тогда
- ПараметрКоманды = МассивПараметровКомманд[СтрокаПараметра.ИндексПозицииЭлемента];
- КонецЕсли;
- КонецЦикла;
- СтруктураПараметра = Новый Структура("УникальныйИдентификатор, БыстрыйДоступ, ПараметрКоманды",
- КлючВарианта,
- Ключ.Пометка,
- ПараметрКоманды);
-
- СписокВнешниихКоманд.Добавить(СтруктураПараметра);
-
- КонецЕсли;
- КонецЦикла;
-
- Если СписокВнешниихКоманд.Количество() > 0 Тогда
- ВариантыОтчетовПереопределяемый.УстановитьБыстрыйДоступВнешнихКоманд(СписокВнешниихКоманд);
+ Если РежимНастройки Тогда
+ ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
+ "
+ | И ЕСТЬNULL(НастройкиПользователя.Видимость, НастройкиРаздела.Ссылка.ВидимостьПоУмолчанию
+ | ИЛИ ВЫБОР
+ | КОГДА НастройкиРаздела.Ссылка.Автор = &ТекущийПользователь
+ | ТОГДА ИСТИНА
+ | ИНАЧЕ ЛОЖЬ
+ | КОНЕЦ) = ИСТИНА",
+ ""
+ );
КонецЕсли;
+ Запрос.Текст = ТекстЗапроса;
- УстановитьПривилегированныйРежим(Ложь);
+ Варианты = Запрос.Выполнить().Выгрузить();
+ ПараметрыДобавления = Новый Структура("ИмяГруппы");
- СписокЭлементов = СтруктураПараметров.СписокЭлементов;
+ ВариантыБыстрогоДоступа = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ", Ложь, Истина));
+ ПараметрыДобавления.ИмяГруппы = "БыстрыйДоступ";
+ ДобавитьВариантыВПанель(ВариантыБыстрогоДоступа, ПараметрыДобавления);
- Для каждого Элемент из СписокЭлементов Цикл
- ЭлементФормы = Элементы.Найти(Элемент.Значение);
- Если ЭлементФормы <> Неопределено тогда
- ЭлементФормы.Видимость = Элемент.Пометка;
+ ВариантыБезГруппы = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы", Ложь, Ложь, Истина));
+ ПараметрыДобавления.ИмяГруппы = "БезГруппы";
+ ДобавитьВариантыВПанель(ВариантыБезГруппы, ПараметрыДобавления);
+
+ ВариантыСГруппой = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Ложь, Ложь));
+ ПараметрыДобавления.ИмяГруппы = "СГруппой";
+ ДобавитьВариантыВПанель(ВариантыСГруппой, ПараметрыДобавления);
+
+ ВариантыСмТакже = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Ложь, Истина));
+ ПараметрыДобавления.ИмяГруппы = "СмТакже";
+ ДобавитьВариантыВПанель(ВариантыСмТакже, ПараметрыДобавления);
+
+ // Добавление вариантов, скрытых отбором (для сохранения их пользовательских настроек)
+ ВариантыСкрытыеОтбором = Варианты.НайтиСтроки(Новый Структура("СкрытОтбором", Истина));
+ Для Каждого Вариант Из ВариантыСкрытыеОтбором Цикл
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("Ссылка, Подсистема", Вариант.Ссылка, Вариант.Подсистема));
+ Если Найденные.Количество() = 0 Тогда
+ СтрокаТаблицы = ДобавленныеВарианты.Добавить();
+ ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Вариант);
КонецЕсли;
КонецЦикла;
+ Элементы.БыстрыйДоступДекорация.Видимость = (ВариантыБыстрогоДоступа.Количество() > 0);
+ Элементы.БезГруппыДекорация.Видимость = (ВариантыБезГруппы.Количество() > 0);
+ Элементы.СГруппойДекорация.Видимость = (ВариантыСГруппой.Количество() > 0);
+ Элементы.СмТакжеДекорация.Видимость = (ВариантыСмТакже.Количество() > 0);
+
+ Если ВариантыБыстрогоДоступа.Количество() = 0
+ И ВариантыБезГруппы.Количество() = 0
+ И ВариантыСГруппой.Количество() = 0
+ И ВариантыСмТакже.Количество() = 0 Тогда
+ Надпись = Элементы.Вставить("СписокОтчетовПуст", Тип("ДекорацияФормы"), Элементы.БыстрыйДоступКолонка1);
+ Надпись.Заголовок = НСтр("ru = 'Нет доступных отчетов.'");
+ КонецЕсли;
+
КонецПроцедуры
+&НаСервере
+Процедура ДобавитьВариантыВПанель(Варианты, ПараметрыДобавления)
+
+ ВариантыКоличество = Варианты.Количество();
+ Если ВариантыКоличество = 0 Тогда
+ Возврат;
+ КонецЕсли;
+
+ ГруппаУровня2Имя = ПараметрыДобавления.ИмяГруппы;
+ ГруппаУровня2 = Элементы.Найти(ГруппаУровня2Имя);
+ РазмещатьВПодгруппах = (ГруппаУровня2Имя = "СГруппой");
+
+ Если ГруппаУровня2Имя = "БыстрыйДоступ" ИЛИ ГруппаУровня2Имя = "СмТакже" Тогда
+ Варианты.Сортировать("Наименование ВОЗР"); // Нет важных
+ ИначеЕсли ГруппаУровня2Имя = "БезГруппы" Тогда
+ Варианты.Сортировать("Важный УБЫВ, Наименование ВОЗР"); // Есть важные
+ Иначе
+ Варианты.Сортировать("ПодсистемаПриоритет ВОЗР, Важный УБЫВ, Наименование ВОЗР"); // Есть группы и важные
+ КонецЕсли;
+
+ // Переменные для поддержки динамики групп верхнего уровня
+ ГруппыВерхнегоУровня = Новый Массив;
+ Для Каждого ГруппаУровня3 Из ГруппаУровня2.ПодчиненныеЭлементы Цикл
+ ГруппыВерхнегоУровня.Добавить(ГруппаУровня3);
+ КонецЦикла;
+ ГруппВерхнегоУровня = ГруппыВерхнегоУровня.Количество();
+
+ ГруппаУровня3Индекс = 0;
+ ГруппаУровня3 = ГруппыВерхнегоУровня[ГруппаУровня3Индекс];
+ ГруппаУровня3Свободно = ГруппыВерхнегоУровня.ВГраница();
+
+ Если РазмещатьВПодгруппах Тогда
+ ТаблицаПодсистем = Варианты.Скопировать(, "Подсистема");
+ ТаблицаПодсистем.Колонки.Добавить("ВариантовВПодсистеме");
+ ТаблицаПодсистем.ЗаполнитьЗначения(1, "ВариантовВПодсистеме");
+ ТаблицаПодсистем.Свернуть("Подсистема", "ВариантовВПодсистеме");
+ ОбщееКоличествоСтрок = ВариантыКоличество + 2*ТаблицаПодсистем.Количество() - Мин(3, ТаблицаПодсистем.Количество());
+ Иначе
+ ТаблицаПодсистем = Неопределено;
+ ОбщееКоличествоСтрок = ВариантыКоличество;
+ КонецЕсли;
+
+ МногоЭлементов = ОбщееКоличествоСтрок > 20;
+
+ ГруппаУровня3Отсечка = Цел(ОбщееКоличествоСтрок / ГруппВерхнегоУровня);
+ ГруппаУровня3Добавка = ОбщееКоличествоСтрок - ГруппаУровня3Отсечка * ГруппВерхнегоУровня;
+ ГруппаУровня3Корректировка = ?(ГруппаУровня3Добавка > 0, 1, 0);
+
+ ГруппаУровня4Осталось = 0;
+
+ // Шаблоны заполнения создаваемых элементов управления
+ НадписьШаблон = Новый Структура(
+ "Вид, Гиперссылка, Высота, ЦветТекста,
+ |РастягиватьПоГоризонтали, РастягиватьПоВертикали"
+ );
+ НадписьШаблон.Вид = ВидДекорацииФормы.Надпись;
+ НадписьШаблон.Гиперссылка = Истина;
+ НадписьШаблон.РастягиватьПоГоризонтали = Истина;
+ НадписьШаблон.РастягиватьПоВертикали = Ложь;
+ НадписьШаблон.Высота = 1;
+ НадписьШаблон.ЦветТекста = ЦветВидимыхВариантов;
+
+ КартинкаШаблон = Новый Структура(
+ "Вид, Ширина, Высота, Картинка,
+ |РастягиватьПоГоризонтали, РастягиватьПоВертикали"
+ );
+ КартинкаШаблон.Вид = ВидДекорацииФормы.Картинка;
+ КартинкаШаблон.Ширина = 2;
+ КартинкаШаблон.Высота = 1;
+ КартинкаШаблон.Картинка = КартинкаБыстрыйДоступ;
+ КартинкаШаблон.РастягиватьПоГоризонтали = Ложь;
+ КартинкаШаблон.РастягиватьПоВертикали = Ложь;
+
+ ГруппаУровня4Шаблон = Новый Структура(
+ "Вид, ЦветТекстаЗаголовка, РастягиватьПоГоризонтали,
+ |Отображение, Группировка, ШрифтЗаголовка"
+ );
+ ГруппаУровня4Шаблон.Вид = ВидГруппыФормы.ОбычнаяГруппа;
+ ГруппаУровня4Шаблон.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов;
+ ГруппаУровня4Шаблон.РастягиватьПоГоризонтали = Истина;
+ ГруппаУровня4Шаблон.Отображение = ОтображениеОбычнойГруппы.Нет;
+ ГруппаУровня4Шаблон.ШрифтЗаголовка = ШрифтЖирный;
+ ГруппаУровня4Шаблон.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
+
+ ГруппаУровня5Шаблон = Новый Структура(
+ "Вид, РастягиватьПоГоризонтали,
+ |Отображение, Группировка,
+ |ОтображатьЗаголовок"
+ );
+ ГруппаУровня5Шаблон.Вид = ВидГруппыФормы.ОбычнаяГруппа;
+ ГруппаУровня5Шаблон.РастягиватьПоГоризонтали = Истина;
+ ГруппаУровня5Шаблон.Отображение = ОтображениеОбычнойГруппы.Нет;
+ ГруппаУровня5Шаблон.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
+ ГруппаУровня5Шаблон.ОтображатьЗаголовок = Ложь;
+
+ Если РежимНастройки Тогда
+ КонтекстноеМеню = Новый Структура("УбратьИзБыстрогоДоступа, ПереместитьВБыстрыйДоступ, Изменить");
+ КонтекстноеМеню.УбратьИзБыстрогоДоступа = Новый Структура("Видимость", (ГруппаУровня2Имя = "БыстрыйДоступ"));
+ КонтекстноеМеню.ПереместитьВБыстрыйДоступ = Новый Структура("Видимость", (ГруппаУровня2Имя <> "БыстрыйДоступ"));
+ КонтекстноеМеню.Изменить = Новый Структура("Видимость", Истина);
+ КонецЕсли;
+
+ ПродолжениеСуффикс = " " + НСтр("ru = '(продолжение)'");
+
+ ДобавляемыеРеквизиты = Новый Массив;
+
+ СтрокаТекущейГруппы = Неопределено;
+ ГруппаУровня4 = Неопределено;
+ ГруппаУровня3НомерЭлемента = 0;
+ ГруппаУровня4Выведено = 0;
+ Для Каждого Вариант Из Варианты Цикл
+ ГруппаУровня3НомерЭлемента = ГруппаУровня3НомерЭлемента + 1;
+ ГруппаУровня3Изменилась = Ложь;
+
+ // Вычисление предела
+ ВерхнийПредел = ГруппаУровня3Отсечка + ГруппаУровня3Корректировка;
+
+ // Корректировка предела с учетом разделения группы на 2 части
+ Если РазмещатьВПодгруппах И ГруппаУровня4Осталось > 1 И МногоЭлементов Тогда
+ ВерхнийПредел = ВерхнийПредел + ГруппаУровня3Свободно;
+ КонецЕсли;
+
+ // Переход к следующей группе верхнего уровня
+ Если ГруппаУровня3НомерЭлемента > ВерхнийПредел
+ И (ГруппаУровня4Осталось = 0 ИЛИ ГруппаУровня4Осталось > 3)
+ И (ГруппаУровня4Выведено = 0 ИЛИ ГруппаУровня4Выведено > 2)
+ И ГруппаУровня3Свободно > 0 Тогда
+
+ ГруппаУровня3НомерЭлемента = 1;
+ ГруппаУровня3Индекс = ГруппаУровня3Индекс + 1;
+ ГруппаУровня3Свободно = ГруппаУровня3Свободно - 1;
+ ГруппаУровня3 = ГруппыВерхнегоУровня[ГруппаУровня3Индекс];
+ ГруппаУровня3Добавка = ГруппаУровня3Добавка - 1;
+ ГруппаУровня3Корректировка = ?(ГруппаУровня3Добавка > 0, 1, 0);
+
+ ГруппаУровня3Изменилась = Истина;
+ КонецЕсли;
+
+ // Переход к следующей группе текущего уровня
+ Если РазмещатьВПодгруппах
+ И (
+ ГруппаУровня3Изменилась
+ ИЛИ СтрокаТекущейГруппы = Неопределено
+ ИЛИ СтрокаТекущейГруппы.Подсистема <> Вариант.Подсистема
+ ) Тогда
+
+ НачалоСПродолжением = (СтрокаТекущейГруппы <> Неопределено И СтрокаТекущейГруппы.Подсистема = Вариант.Подсистема);
+
+ Если НачалоСПродолжением И Прав(ГруппаУровня4.Заголовок, СтрДлина(ПродолжениеСуффикс)) <> ПродолжениеСуффикс Тогда
+ ГруппаУровня4.Заголовок = ГруппаУровня4.Заголовок;
+ КонецЕсли;
+
+ Если НЕ НачалоСПродолжением Тогда
+ СтрокаТекущейГруппы = ТаблицаПодсистем.Найти(Вариант.Подсистема, "Подсистема");
+ ГруппаУровня4Осталось = СтрокаТекущейГруппы.ВариантовВПодсистеме;
+ КонецЕслИ;
+
+ Результат = ДобавитьГруппуУровня4(ГруппаУровня3, Вариант.Подсистема);
+
+ ГруппаУровня4 = Результат.ГруппаУровня4;
+ ГруппаУровня3НомерЭлемента = ГруппаУровня3НомерЭлемента + ?(Результат.Свойство("Декорация"), 2, 1);
+
+ Если НачалоСПродолжением Тогда
+ ГруппаУровня4.Заголовок = ГруппаУровня4.Заголовок + ПродолжениеСуффикс;
+ КонецЕсли;
+
+ ГруппаУровня4Выведено = 0;
+
+ КонецЕсли;
+
+ Если РазмещатьВПодгруппах Тогда
+ ГруппаУровня4Выведено = ГруппаУровня4Выведено + 1;
+ КонецЕсли;
+
+ // Уникальное имя добавляемого элемента
+ ДобавленоЭлементов = ДобавленоЭлементов + 1;
+ НадписьИмя = "ДобавленныйЭлемент_" + Формат(ДобавленоЭлементов, "ЧГ=0");
+
+ // Добавление группы нижнего уровня для горизонтальной группировки
+ Если РежимНастройки ИЛИ ГруппаУровня2Имя = "БыстрыйДоступ" Тогда
+ ГруппаУровня5Имя = "Группа_" + НадписьИмя;
+ ГруппаУровня5 = Элементы.Вставить(ГруппаУровня5Имя, Тип("ГруппаФормы"), ?(РазмещатьВПодгруппах, ГруппаУровня4, ГруппаУровня3));
+ ЗаполнитьЗначенияСвойств(ГруппаУровня5, ГруппаУровня5Шаблон);
+ Иначе
+ ГруппаУровня5 = ?(РазмещатьВПодгруппах, ГруппаУровня4, ГруппаУровня3);
+ КонецЕсли;
+
+ // Добавление флажка (для быстрого доступа не используется)
+ Если РежимНастройки И ГруппаУровня2Имя <> "БыстрыйДоступ" Тогда
+ ФлажокИмя = "Флажок_" + НадписьИмя;
+
+ РеквизитФормы = Новый РеквизитФормы(ФлажокИмя, Новый ОписаниеТипов("Булево"), , , Истина);
+ ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
+
+ Флажок = Элементы.Вставить(ФлажокИмя, Тип("ПолеФормы"), ГруппаУровня5);
+ Флажок.Вид = ВидПоляФормы.ПолеФлажка;
+ Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
+ Флажок.УстановитьДействие("ПриИзменении", "ВидимостьВариантаПриИзменении");
+ КонецЕсли;
+
+ // Добавление картинки (используется только для быстрого доступа)
+ Если ГруппаУровня2Имя = "БыстрыйДоступ" Тогда
+ КартинкаИмя = "Картинка_" + НадписьИмя;
+ Картинка = Элементы.Вставить(КартинкаИмя, Тип("ДекорацияФормы"), ГруппаУровня5);
+ ЗаполнитьЗначенияСвойств(Картинка, КартинкаШаблон);
+ КонецЕсли;
+
+ // Добавление надписи (варианта)
+ Надпись = Элементы.Вставить(НадписьИмя, Тип("ДекорацияФормы"), ГруппаУровня5);
+ ЗаполнитьЗначенияСвойств(Надпись, НадписьШаблон);
+ Надпись.Заголовок = СокрЛП(Вариант.Наименование);
+ Надпись.Подсказка = СокрЛП(?(ПустаяСтрока(Вариант.Описание), Вариант.Наименование, Вариант.Описание));
+ Если ЗначениеЗаполнено(Вариант.Автор) Тогда
+ Надпись.Подсказка = Надпись.Подсказка + Символы.ПС + НСтр("ru = 'Автор:'") + " " + СокрЛП(Строка(Вариант.Автор));
+ КонецЕсли;
+ Надпись.УстановитьДействие("Нажатие", "ВариантНажатие");
+ Если НЕ Вариант.Видимость Тогда
+ Надпись.ЦветТекста = ЦветСкрытыхВариантов;
+ КонецЕсли;
+ Если ГруппаУровня2Имя <> "СмТакже"
+ И (Вариант.Важный ИЛИ ГруппаУровня2Имя = "БыстрыйДоступ")
+ И Вариант.Видимость Тогда
+ Надпись.Шрифт = ШрифтЖирный;
+ КонецЕсли;
+
+ Если РежимНастройки Тогда
+ НадписьКонтекстноеМеню = Надпись.КонтекстноеМеню;
+ Если НадписьКонтекстноеМеню <> Неопределено Тогда
+ Для Каждого КлючИЗначение Из КонтекстноеМеню Цикл
+ КомандаИмя = КлючИЗначение.Ключ;
+ КнопкаИмя = КомандаИмя + "_" + НадписьИмя;
+ Кнопка = Элементы.Вставить(КнопкаИмя, Тип("КнопкаФормы"), НадписьКонтекстноеМеню);
+ Если ВебКлиент Тогда
+ Команда = Команды.Добавить(КнопкаИмя);
+ ЗаполнитьЗначенияСвойств(Команда, Команды[КомандаИмя]);
+ Кнопка.ИмяКоманды = КнопкаИмя;
+ Иначе
+ Кнопка.ИмяКоманды = КомандаИмя;
+ КонецЕсли;
+ ЗаполнитьЗначенияСвойств(Кнопка, КлючИЗначение.Значение);
+ КонецЦикла;
+ КонецЕсли;
+ КонецЕсли;
+
+ // Регистрация добавленной надписи
+ ГруппирующаяСущность = ?(РазмещатьВПодгруппах, ГруппаУровня4.Имя, ГруппаУровня2Имя);
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("Ссылка, Подсистема", Вариант.Ссылка, Вариант.Подсистема));
+ Если Найденные.Количество() > 0 Тогда
+ СтрокаТаблицы = Найденные[0];
+ Иначе
+ СтрокаТаблицы = ДобавленныеВарианты.Добавить();
+ КонецЕсли;
+ ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Вариант);
+ СтрокаТаблицы.ГруппаУровня2Имя = ГруппаУровня2Имя;
+ СтрокаТаблицы.НадписьИмя = НадписьИмя;
+ СтрокаТаблицы.ГруппирующаяСущность = ГруппирующаяСущность;
+
+ Если РазмещатьВПодгруппах Тогда
+ ГруппаУровня4Осталось = ГруппаУровня4Осталось - 1;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если РежимНастройки И ДобавляемыеРеквизиты.Количество() > 0 Тогда
+ ИзменитьРеквизиты(ДобавляемыеРеквизиты);
+ Для Каждого Реквизит Из ДобавляемыеРеквизиты Цикл
+ Флажок = Элементы.Найти(Реквизит.Имя);
+ Флажок.ПутьКДанным = Реквизит.Имя;
+ НадписьИмя = Сред(Реквизит.Имя, СтрДлина("Флажок_")+1);
+ Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", НадписьИмя));
+ Если Найденные.Количество() > 0 Тогда
+ Вариант = Найденные[0];
+ ЭтаФорма[Реквизит.Имя] = Вариант.Видимость;
+ КонецЕсли;
+ КонецЦикла;
+ КонецЕсли;
+КонецПроцедуры
+
+&НаСервере
+Процедура ПерерисоватьПанельОтчетов(СохранитьНастройки, ОставитьИзмененияВНастройках)
+ Если СохранитьНастройки Тогда
+ ОставитьИзмененияВНастройках = Ложь;
+ КонецЕсли;
+
+ Если РежимНастройки И Элементы.ВерхняяПанельНадпись.Заголовок = "" Тогда
+ Элементы.ВерхняяПанельНадпись.Заголовок = НСтр("ru = 'Настроить быстрый доступ можно с помощью правой кнопки мыши.'");
+ КонецЕсли;
+
+ Элементы.ОтборНаименование.Видимость = РежимНастройки;
+ Элементы.ОтборАвтор.Видимость = РежимНастройки;
+ Элементы.СохранитьИзменения.Видимость = РежимНастройки;
+ Элементы.ОтменитьИзменения.Видимость = РежимНастройки;
+ Элементы.ВерхняяПанельСтрока2.Видимость = РежимНастройки;
+ Элементы.ВерхняяПанельОтступ.Видимость = РежимНастройки;
+ Элементы.ВсеОтчеты.Видимость = НЕ РежимНастройки;
+ Элементы.СсылкаВсеОтчеты.Видимость = НЕ РежимНастройки;
+
+ // Заголовок
+ ПрефиксРежимаНастройки = НСтр("ru = 'Настройка:'") + " ";
+ ПрефиксВыведен = (Лев(Заголовок, СтрДлина(ПрефиксРежимаНастройки)) = ПрефиксРежимаНастройки);
+ Если ПрефиксВыведен <> РежимНастройки Тогда
+ Если РежимНастройки Тогда
+ Заголовок = ПрефиксРежимаНастройки + Заголовок;
+ Иначе
+ Заголовок = СтрЗаменить(Заголовок, ПрефиксРежимаНастройки, "");
+ КонецЕсли;
+ КонецЕсли;
+
+ // Удаление элементов
+ УдаляемыеЭлементы = Новый Массив;
+ Для Каждого ЭлементУровня2 Из Элементы.Колонки.ПодчиненныеЭлементы Цикл
+ Если ТипЗнч(ЭлементУровня2) = Тип("ГруппаФормы") Тогда
+ Для Каждого ЭлементУровня3 Из ЭлементУровня2.ПодчиненныеЭлементы Цикл
+ Если ТипЗнч(ЭлементУровня3) = Тип("ГруппаФормы") Тогда
+ Для Каждого ЭлементУровня4 Из ЭлементУровня3.ПодчиненныеЭлементы Цикл
+ УдаляемыеЭлементы.Добавить(ЭлементУровня4);
+ КонецЦикла;
+ КонецЕсли;
+ КонецЦикла;
+ КонецЕсли;
+ КонецЦикла;
+ Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл
+ Элементы.Удалить(УдаляемыйЭлемент);
+ КонецЦикла;
+
+ // Удаление реквизитов
+ УдаляемыеРеквизиты = Новый Массив;
+ НаборРеквизитов = ПолучитьРеквизиты();
+ Для Каждого Реквизит Из НаборРеквизитов Цикл
+ Если ПостоянныеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда
+ УдаляемыеРеквизиты.Добавить(Реквизит.Имя);
+ КонецЕсли;
+ КонецЦикла;
+ ИзменитьРеквизиты(, УдаляемыеРеквизиты);
+
+ // Удаление команд
+ Если ВебКлиент Тогда
+ УдаляемыеКоманды = Новый Массив;
+ Для Каждого Команда Из Команды Цикл
+ Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда
+ УдаляемыеКоманды.Добавить(Команда);
+ КонецЕсли;
+ КонецЦикла;
+ Для Каждого Команда Из УдаляемыеКоманды Цикл
+ Команды.Удалить(Команда);
+ КонецЦикла;
+ КонецЕсли;
+
+ // Сохранение пользовательских настроек
+ Если СохранитьНастройки Тогда
+ СохранитьПользовательскиеНастройки();
+ КонецЕсли;
+
+ // Очистка изменений в пользовательских настройках
+ Если НЕ ОставитьИзмененияВНастройках Тогда
+ ДобавленныеВарианты.Очистить();
+ ДобавленоЭлементов = 0;
+ КонецЕсли;
+
+ // Сброс номера последнего добавленного элемента
+ Для Каждого СтрокаТаблицы Из Подсистемы Цикл
+ СтрокаТаблицы.НомерЭлемента = 0;
+ КонецЦикла;
+
+ // Заполнение панели
+ ЗаполнитьПанельОтчетов();
+
+ Если Модифицированность И НЕ ОставитьИзмененияВНастройках Тогда
+ Модифицированность = Ложь;
+ КонецЕсли;
+КонецПроцедуры
+
+&НаСервере
+Процедура СохранитьПользовательскиеНастройки()
+ ИзмененныеНастройки = ДобавленныеВарианты.Выгрузить(
+ Новый Структура("ИзмененПользователем", Истина),
+ "Ссылка, Подсистема, Видимость, БыстрыйДоступ"
+ );
+ ИзмененныеНастройки.Колонки.Ссылка.Имя = "Вариант";
+ ИзмененныеНастройки.Колонки.Подсистема.Имя = "РазделИлиГруппа";
+ РегистрыСведений.НастройкиВариантовОтчетов.СохранитьНастройкиПользователяВРазделе(ИзмененныеНастройки);
+КонецПроцедуры
+
+&НаСервере
+Функция ПодгруппаСНаименьшимКоличествомЭлементов(Группа)
+ ПодгруппаМин = Неопределено;
+ ВложенныхЭлементовМин = 0;
+ Для Каждого Подгруппа Из Группа.ПодчиненныеЭлементы Цикл
+ ВложенныхЭлементов = Подгруппа.ПодчиненныеЭлементы.Количество();
+ Если ВложенныхЭлементов < ВложенныхЭлементовМин ИЛИ ПодгруппаМин = Неопределено Тогда
+ ПодгруппаМин = Подгруппа;
+ ВложенныхЭлементовМин = ВложенныхЭлементов;
+ КонецЕсли;
+ КонецЦикла;
+ Возврат ПодгруппаМин;
+КонецФункции
+
+
diff --git a/SSL/src/CommonForms/ПанельОтчетов/ПанельОтчетов.mdo b/SSL/src/CommonForms/ПанельОтчетов/ПанельОтчетов.mdo
index a1833f974..bc500a63f 100644
--- a/SSL/src/CommonForms/ПанельОтчетов/ПанельОтчетов.mdo
+++ b/SSL/src/CommonForms/ПанельОтчетов/ПанельОтчетов.mdo
@@ -5,6 +5,11 @@
ruПанель отчетов
+
+
+ ru
+
+ PersonalComputerMobileDevice
diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html
index fadefb081..b8ab3752a 100644
--- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html
+++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html
@@ -1,4 +1,4 @@
-
+
В этой форме задаются параметры доступа к кластеру серверов для выполнения различных административных действий с клиент-серверной информационной базой:
имя и пароль одного из администратора кластера серверов, от имени которого выполняется принудительное завершение (отключение) сеансов пользователей; не задается, если в кластере серверов не задан ни один администратор;
diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl
index cb8c83bef..fae1f911b 100644
--- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl
+++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl
@@ -16,13 +16,27 @@
ПараметрыАдминистрирования = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ();
- ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(
- ПараметрыАдминистрирования.ИмяАдминистратораИБ);
- Если ПользовательИБ <> Неопределено Тогда
- ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор;
+ Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
+ ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(
+ ПараметрыАдминистрирования.ИмяАдминистратораИБ);
+ Если ПользовательИБ <> Неопределено Тогда
+ ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор;
+ КонецЕсли;
+
+ Иначе
+ Администраторы = РегистрыСведений.НеразделенныеПользователи.СписокАдминистраторов();
+ Для каждого ЭлементСписка Из Администраторы Цикл
+ Если ЭлементСписка.Представление = ПараметрыАдминистрирования.ИмяАдминистратораИБ Тогда
+ ИдентификаторАдминистратораИБ = ЭлементСписка.Значение;
+ КонецЕсли;
+ КонецЦикла;
КонецЕсли;
- Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
+ Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
+ Элементы.РежимРаботы.ТекущаяСтраница = Элементы.НетРазделенияДанных;
+ Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ);
+ АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ);
+ Иначе
Элементы.РежимРаботы.ТекущаяСтраница = Элементы.РазделениеДанных;
НеразделенныйАдминистраторИБ = Строка(ИдентификаторАдминистратораИБ);
СписокВыбора = Элементы.НеразделенныйАдминистраторИБ.СписокВыбора;
@@ -31,10 +45,6 @@
Для каждого ЭлементСписка Из Администраторы Цикл
СписокВыбора.Добавить(Строка(ЭлементСписка.Значение), ЭлементСписка.Представление);
КонецЦикла;
- Иначе
- Элементы.РежимРаботы.ТекущаяСтраница = Элементы.НетРазделенияДанных;
- Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ);
- АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ);
КонецЕсли;
ПарольАдминистратораИБ = ПараметрыАдминистрирования.ПарольАдминистратораИБ;
@@ -54,16 +64,16 @@
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
- Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
- Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда
- Возврат;
- КонецЕсли;
- ИмяПоля = "НеразделенныйАдминистраторИБ";
- Иначе
+ Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда
Возврат;
КонецЕсли;
ИмяПоля = "АдминистраторИБ";
+ Иначе
+ Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда
+ Возврат;
+ КонецЕсли;
+ ИмяПоля = "НеразделенныйАдминистраторИБ";
КонецЕсли;
ПользовательИБ = ПолучитьАдминистратораИБ();
Если ПользовательИБ = Неопределено Тогда
@@ -164,18 +174,18 @@
КонецФункции
Функция ПолучитьАдминистратораИБ()
- Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
- Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда
- Возврат Неопределено;
- КонецЕсли;
- Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
- Новый УникальныйИдентификатор(НеразделенныйАдминистраторИБ));
- Иначе
+ Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
АдминистраторИБ.ИдентификаторПользователяИБ);
+ Иначе
+ Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+ Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
+ Новый УникальныйИдентификатор(НеразделенныйАдминистраторИБ));
КонецЕсли;
КонецФункции
diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo
index f26786083..8a36e77cf 100644
--- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo
+++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo
@@ -12,5 +12,4 @@
PersonalComputerMobileDevice
- true
diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form
index 6f711e0a5..78fc8e376 100644
--- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form
+++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form
@@ -85,6 +85,10 @@
Сервер
+
+ ru
+ IP адрес или имя прокси сервера
+ ПроксиСерверРасширеннаяПодсказка29
@@ -125,6 +129,10 @@
Порт
+
+ ru
+ Порт прокси сервера
+ ПортРасширеннаяПодсказка31
@@ -206,6 +214,10 @@
Пользователь
+
+ ru
+ Логин для авторизации на прокси сервере
+ ПользовательРасширеннаяПодсказка34
@@ -246,6 +258,10 @@
Пароль
+
+ ru
+ Пароль для авторизации на прокси сервере
+ ПарольРасширеннаяПодсказка36
@@ -437,6 +453,7 @@
AutoRight
+ trueOnOpen
@@ -446,6 +463,16 @@
OnCreateAtServerПриСозданииНаСервере
+ Abort
+ Close
+ CustomizeForm
+ Ignore
+ No
+ OK
+ RestoreValues
+ Retry
+ SaveValues
+ YesLockOwnertruetrue
diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html
index a1a957a01..c695ee8d9 100644
--- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html
+++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html
@@ -1,2 +1,3 @@
-
-
Для доступа в Интернет с клиентских компьютеров параметры прокси‑сервера задаются на каждом клиентском рабочем месте (по команде Персональные настройки в разделе Настройка и администрирование). При использовании клиент‑серверной версия 1С:Предприятия, параметры прокси‑сервера также указываются и для сервера 1С:Предприятия (форма настроек параметров системы в разделе Настройка и администрирование). В общем случае, параметры прокси-сервера для клиентских рабочих мест и сервера 1С:Предприятия могут различаться.
\ No newline at end of file
+
+
Для доступа в Интернет с клиентских компьютеров параметры прокси‑сервера задаются на каждом клиентском рабочем месте (по команде Персональные настройки в разделе Настройка и администрирование).
+
При использовании клиент‑серверной версии 1С:Предприятия параметры прокси‑сервера также указываются и для сервера 1С:Предприятия (форма настроек параметров системы в разделе Настройка и администрирование). В общем случае, параметры прокси-сервера для клиентских рабочих мест и сервера 1С:Предприятия могут различаться.
Рекомендации по установке пароля для синхронизации данных.
Надежный пароль должен: - состоять не менее чем из восьми символов, - включать в себя заглавные латинские буквы, - включать в себя прописные латинские буквы, - цифры, - символы (подчеркивание, скобки и т.д.) .
+
Надежный пароль должен быть малопонятным выражением.
Форма предназначена для просмотра основных свойств электронной цифровой подписи (ЭЦП).
В ней можно посмотреть основные свойства подписи: кому выдан сертификат, кто установил подпись, дату установки подписи, комментарий к подписи.
По команде "Открыть сертификат" открывается форма просмотра сертификата.
diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form
index 653fbf00a..500f1b540 100644
--- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form
+++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form
@@ -11,6 +11,10 @@
Пароль
+
+ ru
+ Введите пароль учетной записи
+ ПарольРасширеннаяПодсказка13
@@ -56,6 +60,10 @@
ПодтверждениеПароля
+
+ ru
+ Введите пароль учетной записи ещё раз
+ ПодтверждениеПароляРасширеннаяПодсказка15
@@ -98,6 +106,10 @@
СохранятьПарольRight
+
+ ru
+ Сохранять пароль в информационной базе
+ СохранятьПарольРасширеннаяПодсказка17
diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html
index f718ea652..b5ad1de70 100644
--- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html
+++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html
@@ -1,4 +1,4 @@
-
+
Для отправки письма необходимо ввести пароль и нажать кнопку "Продолжить" на командной панели. Эта форма открывается при отправке письма с учетных записей, в которых пароль не задан.